Подтвердить что ты не робот

Как создать представление, основанное на ограничениях, которое изменяет размеры между iPhone 5 и iPhone 4, сопоставимые с операцией Anchor?

Типичные классические Springs и Struts, ака "Якорь и выравнивание", или "Маски для автосигнализации" - это единственный вид управления размером, который я понимаю. Однако в XCode 4.6 "автозапуск" с использованием ограничений, введенных в iOS 6, является по умолчанию, и он усложняет некоторые простые вещи, делая возможным целый мир новых аранжировок, как только вы узнаете, как это сделать. (Чтобы быть ясным, некоторым пользователям может потребоваться простое представление, работающее без борьбы с автоаварийными сражениями, поэтому на раннем этапе Мэтта было предложено обход Autolayout, который воспроизводится ниже)

iOS 6 Ограничения компоновки, система построения интерфейса для редактирования ограничений, я не понимаю.

enter image description here

Если XCode Interface Builder автоматически создает ограничения (например, по краям представления), он, кажется, ведет себя так, как я понимаю.

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

Это означает, что мне нужно, чтобы зеленая область не изменялась по вертикали и изменялась только горизонтально, но она настаивала на том, чтобы привязать себя к нижней части формы и, начиная с нового пустого ножа, восстановит конструктор интерфейса, чтобы он заметил смежность зелёных и пурпурных точек снова, как только построитель интерфейсов стал "глупым", он настаивает только на определении нижнего края зеленого вида с точки зрения его расстояния от нижнего края его родительского представления и не будет (для любого количества возиться) в противном случае используйте простые операции перетаскивания. Я также экспериментировал с командами Pin и не нашел команду pin, которая работает.

Никаких боевых действий с меню компоновщика интерфейса или перетаскивания, по-видимому, недостаточно, чтобы заставить его отказаться от одного из ограничений. Я не могу понять, что я должен делать. Удалить ограничение? Как? Насколько мне известно, ограничения не могут быть удалены, как на панели IB Objects, так и в инспекторе Utilities → Size. Существует опция удаления, но она отображается серым цветом в раскрывающемся меню, которое появляется, когда вы нажимаете кнопку значка "шестерня" в области ограничений.

В идеале мне бы это понравилось, если зеленая область изменилась, так как вид стал шире, но не так, как он становится выше или короче. Я думал, что это очевидно в любом другом инструменте, но в XCode + Autolayout он либо не изменяет размер, либо изменяет размер во всех четырех направлениях. Я не могу удалить или удалить ограничения, которые делают то, что я не хочу делать. У вас должно быть четыре ограничения для каждого представления, которое находится внутри другого представления?

(Обновление 1: вы не можете удалить любое ограничение, которое приведет к двусмысленному или неуказанному макету.)

(Обновление 2: Иногда, если панель uiview не привязывается к родному брату, удаление этого uiview и повторного попытки позволит ему естественным образом "привязать" к родному брату, и ограничение будет сделано относительно объекта представления sibling вместо родителя.)

(Обновление 3: Мэтт удалил свое обходное решение, я воспроизвел его ниже.)

Обходной путь для людей, которые не хотели автозапуска в первую очередь, и кто просто хотел вернуть старые пружины и стойки:

Шаг 1: Отключить автоспуск:

enter image description here

Шаг 2: Выберите правильные маски авторезистировки:

enter image description here

4b9b3361

Ответ 1

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

В вашем случае я создал следующие ограничения:

enter image description here

Я переименовал ваши взгляды "зеленый" и "пурпурный", чтобы сделать вещи более ясными в навигаторе документов. Я сделал следующее:

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

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

Ответ 2

Это ответ, если вы не хотите отключать новый режим автоматической компоновки iOS6.

Если режим просмотра для представления верхнего уровня и всех представлений на уровне под-уровня - Scale to Fill, вы используете режим привязки "меньше или равно" в этом случае, потому что вы не можете удалить это ограничение. Два цветных изображения не сохраняются в наконечнике как имеющие размер (ширина, высота) или положение (верхний левый угол), вместо этого они сохраняются с ограничениями, представляющими их макет. Макет "меньше или равно", а не "равный", можно получить, щелкнув верхний квадрат, затем появятся четыре строки ограничений, выберите нижнюю часть, которая идет от нижнего края элемента управления, выбранного вами в нижней части представление и изменить тип с равным на меньшее или равное.

enter image description here

Если режим просмотра НЕ заполняется, то потребуются другие изменения ограничений. Этот многогранный дизайн более гибкий, чем старые "пружины и распорки", но не так просто изучить.

Более очевидный режим, который вы можете использовать, - это получить ограничение между двумя объектами. Почему это так сложно (иногда я могу это сделать, а иногда и не могу), я до сих пор не знаю.

Здесь образец, когда мне удалось получить ограничение, чтобы появиться между двумя объектами, а не от этого объекта до его родительского представления, но эта ситуация заключалась в том, что я мог всегда получать интерфейс, чтобы взаимодействовать с ним, было бы намного больше интуитивно понятный способ создания ситуации, когда верхний квадрат не привязан ко всей высоте представления:

enter image description here

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

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

enter image description here

Я могу заставить Interface Builder продолжать добавлять все больше дублирующих ограничений, просто изменяя ограничение от Equals до Less or Equal. Я считаю, что ошибка в построителе интерфейса в XCode 4.6, а так как макетные ограничения являются относительно новой частью CococaTouch, я не удивлен, что поддержка конструктора интерфейса для ограничений автосоздания при перетаскивании и перемещении элементов вокруг является ошибкой.