2015-08-03 5 views
3

Этот вопрос может показаться слишком простым специалисту AutoLayOut, но по-прежнему не используется в моем обычном использовании AutoLayOut. Я обычно играю с .Top, .Bottom, .Left, .Right, .CenterX, .CenterY атрибуты. Но как мне это сделать, имея дело с несколькими объектами?Регулярный интервал с AutoLayout

Например, если у меня есть пять UILabel (s), и я хочу, чтобы они были вертикально выровнены с регулярным интервалом. Для оси Х частей, легко:

myXConstraint = NSLayoutConstraint(item: label1, 
     attribute: .CenterX, 
     relatedBy: .Equal, 
     toItem: superView, 
     attribute: .CenterX, 
     multiplier: 1.0, 
     constant: 0.0); 

с ограничением, как этот на каждом из 5 меток, то они будут выровнены по вертикали.

Но как я должен писать другие ограничения, так что label1 появляется наверху, затем label2, label3 ... .. label5. И я хочу, чтобы пространство сверху, одно внизу, а промежутки между каждой последовательной меткой были одинаковыми.

+0

ли вы создаете ярлык во время выполнения программно или были созданы с выходами xib? –

+0

'NSLayoutConstraint.constraintsWithVisualFormat' может использоваться. см. [this] (http://www.knowstack.com/swift-autolayout-visual-format-language-sample-code/) является примером для 'horizontal'. вы можете сделать это 'vertical' – iRiziya

+0

Я делаю все это в коде (программно). – Michel

ответ

2

Создать 6 spacer views.

Refer here.

+1

Я вижу, спасибо за эти советы. Должен признаться, я немного разочарован :) Действительно, поскольку эти комментарии и ответ позволяют предположить, что можно решить некоторые проблемы, но ...... Я надеялся на «волшебный атрибут», .equallySpaceOnX и .equallySpaceOnY ... или что-то в этом роде. – Michel

+0

Нет проблем. Поскольку многие люди сталкиваются с этой проблемой, вы можете написать для нее библиотеку. –

1

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

И если вы разрабатываете для iOS 9, то вы можете реализовать Stack View и выполнить эту функцию без какого-либо времени без реализации Autolayout.

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

После создания каждой метки перед добавлением в качестве дочернего объекта родительского контейнера, получите все подпункты. Если счетчик массива равен нулю, добавьте ограничение с соответствующим родительскому контейнеру для вертикального интервала. Там добавьте его как subview

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

В последнем стеке будет добавлен недавно добавленный вид/метки. Следовательно, в массиве subview list последним индексом массива является метка, созданная чуть выше текущего вида/метки.

+0

В итоге я не использовал автозапуск, я столкнулся с некоторыми проблемами, и реализация автозапуска была сложнее, чем вещь вручную (в данном случае). – Michel

+0

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

+0

Спасибо. Затем я должен вернуться к коду и посмотреть, в чем проблема. Но я знаю, что даже если он будет работать, он будет намного длиннее кода, который у меня есть сейчас. Кроме того, я согласен с тем, что AutoLayout обычно удобен и подходит для использования. – Michel

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