6

Это похоже на действительно основной вопрос, но я не могу найти ответ на него.Вручную укажите ограничения в Xcode 4 interfacebuilder/раскадровка

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

Теперь, когда Xcode создает ограничение определенного типа - скажем, высоту ограничение - я знаю, что я могу изменить его атрибуты - Relation, Constant и Priority в случае высоту ограничения - с помощью инспекторов атрибутов. Что мне не может выяснить, как вручную добавить или удалить ограничения данного типа, а не полагаться на магию Xcode, чтобы сделать это для меня.

screenshot showing the same stuff described in the paragraph above

К примеру, в моем текущем сценарии, у меня есть ViewController, который содержит панель инструментов и вид таблицы. Теперь я знаю именно то, что ограничения, я хочу использовать для описания вертикального позиционирования и определения размеров этих двух точек зрения:

  • В верхней части панели инструментов имеет вертикальное пространство 0 из верхней части экрана
  • панель имеет фиксированную высоту
  • дна в виде таблицы имеет вертикальное пространство 0 из нижней части экрана
  • в верхней части представления таблицы имеет вертикальное пространство 0 из нижней части панели инструментов

Таким образом, высота стола будет соответствующим образом изменена на размер экрана.

Однако Xcode в своей мудрости решил, что это не то, что я хочу, и вместо этого наложил на меня следующие ограничения (которые, похоже, не хотят меняться независимо от того, насколько я произвольно перетаскиваю вещи вокруг и молитесь):

  • в верхней части панели инструментов имеют вертикальное пространство 0 из верхней части экрана
  • в нижней части панели инструментов имеют вертикальное пространство 526 из нижней части экрана
  • в таблице вид имеет вертикальное пространство 0 в нижней части экрана
  • Вид таблицы имеет фиксированную высоту 526

В результате, все идет не так, когда я пытаюсь просматривать мой ViewController на небольшом экране, или в контейнере:

screenshot of EVERYTHING GOING WRONG

Не будучи в состоянии просто вручную установить свои собственные ограничения, когда я точно знаю, что мне нужно, это расстраивает. Как я могу явным образом удалить ограничения дерьма, которые Xcode автоматически создал, и вместо этого вручную добавить свой собственный?

+0

Just FYI - Xcode 5 DP никогда не коснется ваших ограничений, если вы не попросите его, даже если у вас есть неоднозначные ограничения. Опыт Xcode 4 на данный момент не применим. –

+0

Это уже не проблема в современных версиях Xcode. – jtbandes

ответ

1

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

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

Вы можете добавить ограничения в верхнем меню. Щелкните объект, а затем редактор в меню. Вы можете добавить ограничения с помощью подменю Align и Pin (которые впоследствии можно отредактировать).

Примечание: не все ограничения могут быть добавлены в IB. Соотношение сторон, например, может быть выполнено только в коде.

PS. Xcode позволит вам удалять ограничения, которые являются избыточными, то есть они не оставят неопределенное состояние. Поэтому, чтобы удалить ограничения «b * * ** t», вы должны сначала добавить достаточно других для создания разрешенного состояния.

+0

Какое ограничение вы добавляете на всех четырех краях? – expert

+1

Все, действительно. Это лишь временное исправление, в то время как вы редактируете другие ограничения, чтобы Xcode 4 не испортил все это :) Вы удалите его после того, как вы закончите редактирование. Например, просто прикрепите каждую сторону к супер-представлению. – user1459524