Получить высоту вида заголовка внутри листа действий
Я сделал специальный наконечник для отображения фотографии человека, имени и информации о компании внутри приложения. Этот кончик отображается в области заголовка листа действий. На данный момент мне удалось получить ширину области, но не высоту - так как я не могу найти, какой вид проверить размер.
в 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)])
Изображение размера области мне нужно
1 ответ
Вы можете использовать метод systemLayoutSizeFitting(_:), чтобы получить расчетный размер UIView
после применения всех его ограничений.
Что-то вроде этого:
let height = customView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
Конечно, вам нужно рассчитать его после установки всех данных (текстов меток) для просмотра. Но @Larme был прав в комментариях, это не очень хорошая практика для настройки UIAlertController
, Было бы лучше написать UserMenuViewController
с пользовательским переходом, который будет действовать как лист действий.