2017-01-14 2 views
1

У меня есть ошибка ограничения,Interface Builder - Constraint максимальная ширина и поля

То, что я хочу сделать, это «центрировать вид, имеют 20 наценку на представлении, и имеют максимальную ширину 320»

Так что на iPad вид не растягивается, но на более мелких устройствах вид может быть меньше 320 ширины и иметь 20 очков маржи.

Однако использование этих правил дает мне ошибку, возможно, потому, что я говорю, что поля могут быть> = 20, а ширина < = 320, и представление не имеет представления о том, как это согласовать.

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

Как достичь желаемого эффекта, используя только один вид и его ограничения?

enter image description here

+2

Измените ограничения на начало/конец на = 20 и установите их приоритет на 999, чтобы они могли быть разбиты на более широкие устройства. – Paulw11

+0

Вы уже сказали «центрируйте его по горизонтали», поэтому нет необходимости как для ведущего, так и для трейлинг-ограничения. – matt

+0

@ Paulw11 круто, это делает трюк! Отправьте его как ответ, чтобы я мог его принять. – htafoya

ответ

4

Как вы сделали вывод, autolayout должен знать, какие тяготы он должен разорвать в случае confl ict, и это делается по приоритетам. Однако у вас есть другой конфликт, поскольку ограничения ведущего/конечного и ширины все относительны. Это означает, что автоопределение не может определить ширину представления.

Измените ограничения на начало/конец на = 20 и установите их приоритет на 999, чтобы они могли быть разбиты на более широком устройстве. Это позволит определить ширину и устранить конфликты.

1

Как это:

enter image description here

Заметим, что (1) не требуется ограничение рентабельности продольного, так как мы уже горизонтально по центру, и (2) ширина 320 имеет пониженный приоритет, тем самым предоставляя неравенству, ведущему ограничению маржи, что-то стремиться к сомнению, но в противном случае это не мешает.

Это то, что он выглядит как на iPhone 4s в портретном: мы стеснены боковых полях:

enter image description here

Это то, что он выглядит так же как на iPhone 4s в ландшафтном (и, конечно, на ничего шире): мы расширяем нашу ширину, но только до 320:

enter image description here

+0

Обратите внимание, что 'leadingMargin' не заподлицо с левым краем супервизора. Если htafoya хочет ровно 20 пунктов маржи, это ограничение необходимо будет изменить, чтобы просто использовать 'leading'. –

+0

@robmayoff Согласен. Я не мог понять, что он имел в виду в отношении маржи. В своем скриншоте он привязан к краю супервизора, а не к его краю. Но я не могу сказать, понимает ли он то, что в конечном итоге означает. Поэтому мой ответ состоит в том, чтобы проиллюстрировать необходимые _concepts_, но, конечно, жонглирование точными номерами соответствует OP. – matt

+0

Ум, я поместил те же ограничения, что и у вас, но маржа всегда была 20, поэтому, когда я расширился до iPad, просмотр не использовался, чтобы заполнить все, кроме 20 очков с каждой стороны. Paulw11 дает ограничения, которые я ищу. – htafoya

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