Как правильно использовать UIView systemLayoutSizeFitting, чтобы получить высоту для отображения всех подпредставлений сIOS

Программируем под IOS
Ответить
Anonymous
 Как правильно использовать UIView systemLayoutSizeFitting, чтобы получить высоту для отображения всех подпредставлений с

Сообщение Anonymous »

TD;DR
Похоже, что в некоторых случаях systemLayoutSizeFitting не возвращает правильную высоту для правильного отображения/позиционирования всех подпредставлений вид. Я неправильно использую systemLayoutSizeFitting или есть какой-то другой способ избежать этого?

Длинная история:
Файл XIB UIViewController содержит не только основное представление, но и ряд других представлений, которые добавляются к представлению контроллеров представлений во время выполнения. Все эти дополнительные представления должны иметь одинаковую высоту при добавлении в представление контроллеров представлений.
Представления могут выглядеть следующим образом: Простое представление-контейнер, содержащее некоторые подпредставления, наложенные друг на друга.
Изображение

Поскольку высота представления контейнера должна быть гибкой, вертикальное расстояние между нижней кнопкой и меткой над ней использует ограничение больше, чем.< /p>
Чтобы придать всем представлениям одинаковую высоту, я попытался измерить необходимую высоту каждого представления с помощью systemLayoutSizeFitting:

Код: Выделить всё

@IBOutlet var pageViews: [UIView]!

override func viewDidLoad() {
super.viewDidLoad()

var maxHeight: CGFloat = 0
for pageView in pageViews {
// Add pageView somewhere on view and give it leading, trailing and top
// constraint, but no height constraint yet.
addToView(pageView)

maxHeight = max(maxHeight, pageView.systemLayoutSizeFitting(CGSize(width: view.frame.width, height: UIView.layoutFittingCompressedSize.height), withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel).height)
}

for pageView in pageViews {
// Give all pageViews the same height
pageView.heightAnchor.constraint(equalToConstant: maxHeight).isActive = true
}
}
Это не работает, если текст метки становится слишком длинным:
[img]https: //i.sstatic.net/FrNoz.jpg[/img]

В правом примере высота недостаточно велика, поэтому кнопка сжимается. Я могу противодействовать этому, увеличив сопротивление вертикальному сжатию кнопки, однако в этом случае другие элементы управления (например, заголовок) сжимаются...
Почему это происходит? Почему systemLayoutSizeFitting не возвращает высоту, достаточную для отображения всех элементов управления без сжатия?

Подробнее здесь: https://stackoverflow.com/questions/710 ... -to-show-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»