获取动作表中标题视图的高度

时间:2018-12-04 16:41:46

标签: ios swift uiview uiactionsheet

我制作了一个自定义笔尖,用于在应用程序内显示人物照片,姓名和公司信息。 该笔尖显示在操作表的标题区域中。目前,我设法获得了区域的宽度,但没有得到高度-因为我似乎找不到要检查其尺寸的视图。

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)])

我需要的区域大小的图像

The view I need the size for is marked in red

1 个答案:

答案 0 :(得分:0)

在应用所有约束后,您可以使用systemLayoutSizeFitting(_:)方法来计算UIView的计算大小。

类似这样的东西:

let height = customView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height

当然,您需要在设置所有数据(标签的文本)以供查看之后进行计算。但是@Larme在评论中是正确的,自定义UIAlertController不是一个好习惯。最好编写一些具有自定义过渡效果的UserMenuViewController,就像操作表一样。