2015-09-09 6 views
2

Используя автоматический макет, я хотел бы, чтобы красочный UIViewControllers был ответственным за свои собственные высоты, хотя ограничение контейнера, удерживающего их, находится внутри основного UIViewControllers. Может быть, это может быть достигнуто с использованием протокола и делегирования? Есть идеи?Автоматическая компоновка с контейнером

  • Ради инкапсулирования, красочные UIViewControllers не должны подвергаться воздействию атрибутов основного UIViewController

enter image description here

Что-то вроде этого:

func updateMyHight() 
{ 
    self.containerHoldingMe.heightConstraint.constant = 100 
} 
+2

может у просьба пояснить немного больше. –

+0

Несомненно. Где бы вы хотели, чтобы я уточнил? – Luda

+1

Это не очень удобно использовать контроллеры представлений. – matt

ответ

-1

Что бы я сделал заключается в следующем:

  1. Поместите «контейнерный вид» как в виде зеленого, так и голубого контроллера и сдерживайте верхний, ведущий и ведущий к виду viewcontroller.
  2. Поместите в эти контейнеры элементы, которые заставляют их изменять размер и ограничивать их таким образом, чтобы высота контейнеров зависела от их содержащихся элементов.
  3. Сохраните ссылку на родительский контроллер, добавив слабое свойство как к зеленому, так и к синему контроллеру в методе prepareForSegue в родительском контроллере.
  4. Добавьте ограничение высоты в контейнеры в родительском приложении и перетащите IBOutlet в оба этих ограничения.
  5. После загрузки зеленых и синих контроллеров и изменения размеров элементов, получите высоту представлений «контейнер» и назначьте их ограничениям высоты в родительском контроллере.
+0

Этот ответ не так хорош, когда у вас есть бесконечное количество красочных контроллеров. Если вы контролируете размер каждого цветного контроллера неявно от основного контроллера, вы теряете инкапсуляцию. – Luda

0

Подкласс UIView и переопределение intrinsicContentSize. Если вы правильно сыграете в свои карты, вы дадите вашему подклассу свойство, которое будет проконсультироваться с вашим intrinsicContentSize. Теперь взгляды устанавливают свои собственные высоты, насколько это касается автоспуска.

Если вы хотите, чтобы они были равномерно распределены, используйте новый UIStackView iOS 9 для их распространения. Он подчиняется внутреннему размеру содержимого его размещенных представлений. Поскольку представление стека может быть сконфигурировано в наконечнике, все упражнение будет состоять в основном из одной строки кода.

+0

Можете ли вы дать небольшой образец кода? – Luda

1

Пожалуйста, приложите ответ.

1. Код и Interface Builder enter image description here

2. Результат enter image description here

+0

Это выглядит многообещающе. Можете ли вы отправить код, для быстрого копирования? Или, может быть, загрузить его где-нибудь? – Luda

+0

Здесь вы найдете: https://github.com/dobaduc/ColofulViewControllers – Ducky

+0

Это не работает, если вы используете регулярный сеанс контейнера: - / – Luda

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