Использование классов Auto Layout и Size

Я новичок в использовании классов Auto Layout и Size, но я много сделал или исследовал, как все это работает. Хотя я понимаю это, я все еще не могу понять простых вещей. То, что я пытаюсь сделать, это центрировать две кнопки для всех iPhone в портретном режиме, хотя он выглядит хорошо на 5,5-дюймовом экране, он ухудшается, а размер экрана уменьшается. Мне было очень сложно научиться использовать Auto Layout, поэтому любая помощь очень ценится.

введите здесь описание изображения


person 01Riv    schedule 10.02.2016    source источник
comment
Добавьте представление с помощью двух кнопок. а затем установите вертикальный центр просмотра. Если вам нужна дополнительная помощь, дайте мне знать.   -  person Chandan    schedule 10.02.2016


Ответы (2)


Вы имеете в виду, что хотите, чтобы они были центрированы по вертикали? (Похоже, они уже центрированы по горизонтали.)

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

Вместо этого вам, вероятно, понадобится ограничение center Y для одной из кнопок. Быстрый способ построить это как доказательство концепции:

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

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

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

Надеюсь, это поможет!

person Tim    schedule 10.02.2016
comment
Я попробую! Спасибо за отличное объяснение! - person 01Riv; 10.02.2016
comment
Алос, большая часть этого делается программно? (что меня устраивает) или через раскадровку? Сбой Xcode каждый раз, когда я добавляю представление контейнера и щелкаю его контроллером представления! - person 01Riv; 10.02.2016
comment
Вы должны иметь возможность добавить представление контейнера в раскадровке. Попробуйте использовать меню «Редактор» › «Встроить в…» или, если это тоже не помогает, просто перетащите другой простой вид на холст из библиотеки объектов (в правом нижнем углу), а затем переместите кнопки в этот вид. - person Tim; 11.02.2016

Меня это тоже беспокоило, пока я не разобрался. Вот несколько советов:

  • Внизу есть класс размера, который вы выбираете, и размер контроллера представления на раскадровке. Это разные вещи! Что невероятно сбивает с толку, так это то, что изменение класса размера также изменит размер контроллера, поэтому вы в конечном итоге думаете, что iPhone компактный/любой.
  • На самом деле это работает так: класс размера определяет, какие представления и ограничения существуют. Вы заметите, что когда вы раскрываете виды в классе размера, отличном от любого/любого, в инспекторе справа появляется флажок. Он будет в разделе «установлено». Если вы сейчас измените класс размера, представление исчезнет, ​​пока вы не установите его в этот новый класс. То же самое верно и для ограничений.
  • Размер контроллера демонстрационного представления контролируется правым инспектором. Вы можете сделать его любого размера, но, вероятно, у вас есть какое-то целевое устройство, такое как iPhone 6.

Автоматический макет:

  • Ограничения неудобны, пока вы не поймете, что они означают. Вы должны рассмотреть гипотетического гнома, который нарисует для вас сцену. Если вы не дадите ему достаточно информации, он не будет знать, где взять контроль. Если вы предоставите ему противоречивую информацию, он выдаст ошибку NSLayoutConstraint.
  • Не используйте автоматически сгенерированные ограничения. Вы никогда не узнаете, что он сделал. Используйте логику.

Ваш конкретный вопрос:

  1. Начните с чистой доски в любом/любом
  2. Вставьте кнопки в
  3. Щелкните правой кнопкой мыши от кнопки слева, добавьте ведущее ограничение к полю. Сделайте то же самое для правой. Измените константу ограничения на ноль. Убедитесь, что это не относительно поля, так как вы хотите, чтобы оно было полностью до края. Это фиксирует положение X кнопки. Вы говорите, что края кнопок должны касаться краев экрана, независимо от размера экрана.
  4. Чтобы зафиксировать положение кнопки Y, создайте ограничения для верхнего края, другой кнопки и добавьте ограничение по высоте.
  5. Измените размер контроллера, чтобы увидеть, как он будет выглядеть. Помните, что вам может понадобиться обновить его.
person Carlos    schedule 10.02.2016