Получить высоту вида заголовка внутри листа действий

Я сделал специальный наконечник для отображения фотографии человека, имени и информации о компании внутри приложения. Этот кончик отображается в области заголовка листа действий. На данный момент мне удалось получить ширину области, но не высоту - так как я не могу найти, какой вид проверить размер.

в 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 с пользовательским переходом, который будет действовать как лист действий.

Другие вопросы по тегам