Как автоматически обрабатывать относительное позиционирование в iOS? - PullRequest
6 голосов
/ 30 августа 2011

Я хочу расположить sub UIView (sub_UIView) как подпредставление родительского UIView (parent_UIView).Когда родительский_UIView изменяет размеры / перемещает, sub_UIView будет оставаться относительной позиции parent_UIView.Например, sub_UIView находится в нижнем правом углу parent_UIView.При перемещении parent_UIView элемент sub_UIView автоматически остается в правом нижнем углу parent_UIView.

Мне удалось сделать это вручную, обновив фрейм sub_UIView при перемещении фрейма parent_UIView, но как это сделать автоматически в iOS?Есть ли свойства для этого?(аналогично autoresizingmask для изменения размера подпредставлений)

Спасибо!

1 Ответ

4 голосов
/ 30 августа 2011

Обновлен старый ответ, в котором упоминаются только маски изменения размера

Autolayout (iOS 6)

В iOS 6 была добавлена ​​функция автоматического размещения, хотя и довольно уродливо для работы с XCode в раскадровке / XIB. Autolayout слишком велик, чтобы объяснить, но суть его в том, что это набор правил между представлениями в иерархии. Таким образом, вы можете прикрепить положение вида к правой границе родительского вида. См. Руководство по программированию Auto Layout

Маски с автоматическим изменением размера (iOS 2)

Посмотрите параметры в Инспекторе размеров:

Autoresizing and positioning inside a view

Это эквивалентно действию

myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin | 
    UIViewAutoresizingMaskFlexibleLeftMargin | 
    UIViewAutoresizingMaskFlexibleWidth | 
    UIViewAutoresizingMaskFlexibleHeight;

Обратите внимание, что есть разница между выполнением кода и IB. Параметры автоматического изменения размера IB для границ работают как распорки, выбор правильной, например, означает, что «моя правая граница теперь привязана к правой границе суперпредставления».

С другой стороны, код делает противоположное, где вам нужно указать, какие границы не распостранены, иначе. они гибкие. Высота и ширина работает нормально.

Layout Subviews (iOS 2, но есть ошибки для iOS5 +)

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

Вместо этого предпочитайте делать все свои собственные настройки на UIView -layoutSubviews. Этот метод вызывается по мере необходимости, когда setNeedsLayout запущен, например, когда ширина представления изменяется, подпредставления получают событие подпредставлений макета. Также значительно упрощает реализацию вращающихся интерфейсов, поскольку этот метод вызывается для новой ширины, чтобы определить, как будет выглядеть анимация.

Имейте в виду, что подпредставления макета работают после выполнения масок автоматического макета / автоматического изменения размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...