2015-06-26 3 views
1

У меня было много времени, чтобы прочитать другие вопросы, прежде чем задавать этот вопрос, и пока не удалось решить проблему - надеюсь, кто-то может помочь.Автоматически устанавливать высоту пользовательского UIView на основе его содержимого?

У меня есть пользовательский вид предупреждений, подкласс UIView. Я пытаюсь установить его в состояние, когда его ширина фиксирована, и его высота динамически растет на основе высоты его двух меток (title и message) и динамического количества кнопок действий, с которыми он может быть настроен.

Я использовал AutoLayout для настройки элементов управления, которые работают нормально, но пока я все еще вручную настраиваю рамку самого представления в своем инициализаторе.

Мне нужно, чтобы высота представления была рассчитана по высоте двух моих меток и кнопок n плюс расстояние между ними.

Я пробовал предоставить intrinsicContentSize для моего просмотра, но этот метод никогда не вызывается, и он даже не просит его, поэтому я в тупике о том, как действовать.

Подводя итоги: я, вероятно, нуждаюсь в iOS9 UIStackView, но у меня нет такой роскоши, поэтому мне нужно испечь что-то подобное в iOS 7/8. Я посмотрел на OAStackView, но я бы предпочел не использовать внешний зависимость.

+0

вы можете попробовать создать выход для ограничений высоты для представления, а затем управлять 'heightContraint.constant' в соответствии с высотой ваших меток. –

+0

Когда я обновляю ограничение? Я не уверен, когда высота этих меток фактически рассчитана. – Luke

+0

Попробуйте установить viewDidLayoutSubViews –

ответ

2

Просто подумайте: вы пытались создать представление в Interface Builder? Дайте ему фиксированную ширину с приоритетом: 1000. Добавьте ограничение по высоте, но центрируйте представление по вертикали в своем супервизоре.

Затем установите вертикальный приоритет содержания Обнимая зрения в вертикальном и приоритет содержания сопротивления сжатия 1000.

Это должно привести мнение рассчитать свою собственную высоту на основе его подвидов. Вам нужно только удостовериться, что subviews привязаны к супервизору таким образом, который определяет высоту без какой-либо двусмысленности.

+0

Единственная причина, по которой я не делал этого изначально, это то, что количество кнопок может быть динамическим. Могу ли я все-таки справиться с этим с IB? – Luke

+0

Возможно, вы можете сделать это с помощью UITableView и поместить каждую кнопку в ячейку. Это будет болезненно, так как вам придется реализовать все Tableview/Tableviewcell и т. Д. Если у вас есть максимальное количество кнопок, вы можете обходиться с этим путем добавления этого количества кнопок в IB и установки их ограничения по высоте на 0, когда они не нужно. Не очень хороший стиль, но он должен работать. – JWKothe

Смежные вопросы