Получить высоту вида заголовка внутри листа действий - PullRequest
0 голосов
/ 04 декабря 2018

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

В 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 голосов
/ 04 декабря 2018

Вы можете использовать метод systemLayoutSizeFitting (_:) , чтобы получить вычисленный размер UIView после применения всех его ограничений.

Примерно так:

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

Конечно, вам нужно рассчитать его после установки всех данных (текстов меток) для просмотра.Но @Larme был прав в комментариях, неправильно настраивать UIAlertController.Было бы лучше написать несколько UserMenuViewController с пользовательским переходом, который будет действовать как лист действий.

...