我制作了一个自定义笔尖,用于在应用程序内显示人物照片,姓名和公司信息。 该笔尖显示在操作表的标题区域中。目前,我设法获得了区域的宽度,但没有得到高度-因为我似乎找不到要检查其尺寸的视图。
在UIAlertController
中,我采用了contactAlertController.view.subviews[0]
来获取警报的宽度。但是高度是包括按钮在内的全高。
有什么方法可以达到标题视图的大小吗?因为现在的主要问题是,如果用户的名称太长或太短,它实际上就不会包装好,否则会留下太多空间-因为我将标题写为"\n\n\n\n\n\n"
let contactAlertController = UIAlertController(title: "\n\n\n\n\n\n", message: nil, preferredStyle: UIAlertController.Style.actionSheet)
guard let customView = Bundle.main.loadNibNamed("userInfo", owner: self, options: nil)?.first as? QuickInfoView else { return }
customView.backgroundColor = .clear
customView.translatesAutoresizingMaskIntoConstraints = false
customView.staffName.text = "\(user.givenName) \(user.surname)"
customView.staffCompany.text = users[indexPath.row].companyName
customView.staffTitle.text = users[indexPath.row].jobTitle
customView.imageView.image = users[indexPath.row].userPhoto ?? UIImage(named: "nobody")!
let viewToPlaceNibIn = contactAlertController.view.subviews[0]
contactAlertController.view.addSubview(customView)
NSLayoutConstraint.activate([NSLayoutConstraint(item: customView, attribute: .left, relatedBy: .equal, toItem: viewToPlaceNibIn, attribute: .left, multiplier: 1, constant: 0),
NSLayoutConstraint(item: customView, attribute: .right, relatedBy: .equal, toItem: viewToPlaceNibIn, attribute: .right, multiplier: 1, constant: 0),
NSLayoutConstraint(item: customView, attribute: .top, relatedBy: .equal, toItem: viewToPlaceNibIn, attribute: .top, multiplier: 1, constant: 0)])
答案 0 :(得分:0)
在应用所有约束后,您可以使用systemLayoutSizeFitting(_:)方法来计算UIView
的计算大小。
类似这样的东西:
let height = customView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
当然,您需要在设置所有数据(标签的文本)以供查看之后进行计算。但是@Larme在评论中是正确的,自定义UIAlertController
不是一个好习惯。最好编写一些具有自定义过渡效果的UserMenuViewController
,就像操作表一样。