2013-10-14 1 views
8

У меня есть приложение для iPad, в котором есть экран входа в систему, с элементами управления входами, содержащимися в UIView.Как я могу использовать ограничения AutoLayout, чтобы указать другой макет на пейзаж или портрет без использования кода?

Когда iPad находится в портретной ориентации, у меня есть вход UIView у основания и центра приложения, почти прямо над клавиатурой, а логотип компании находится в UIImageView с центром в верхней части. Я использую ограничения AutoLayout, чтобы логотип компании тяготел к вершине и справа, а пользовательский интерфейс UIView тяготел к нижней и правой.

http://chattypics.com/files/ipadportrait_0dzalz3ipx.png

Когда я повернуть это пейзаж, эффект что-то вроде этого:

http://chattypics.com/files/ipadlandscape1_j15ps5c95u.png

Я хочу, чтобы это выглядело как этот

http://chattypics.com/files/ipadlandscape2_sobufqkdhg.png

Итак, Я хочу, чтобы оба элемента были бок о бок, и я хочу, чтобы Login UIView был далее вправо. Размер интервала справа от UIView в портретном режиме больше, чем я хочу для ландшафтного режима, а расстояние до нижней части меньше, чем я хочу для ландшафтного режима. Я мог бы справиться с этим через «центр в контейнере» вместо этого, но это также не сработало бы в ландшафтном режиме.

Я использовал технику in this post, чтобы сделать вещи «бок о бок» в ландшафтном режиме, но я не верю, что этого будет достаточно, потому что я хочу, чтобы макеты в «представлениях» также отличались друг от друга на вращение.

Я могу придумать, как это сделать программно, но я не могу себе представить, что это все, что уникально необходимо, так есть способ использовать только ограничения в IB, чтобы снять это? Некоторые «это то, что ограничения в IB были разработаны для« пути », возможно, с приоритетами? Или мне просто нужно сделать это в коде?

+0

Я не уверен, что это может быть достигнуто без написания кода. Вы можете посмотреть мой ответ на этот вопрос: http: // stackoverflow.com/questions/17772922/can-i-use-autolayout-to-обеспечить-different-constraints-for-landscape-and-portrait/19719482 # 19719482 – knl

ответ

0

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

5

Вы можете добиться такого поведения, используя различные приоритеты для ограничений в Interface Builder. Для обоих представлений («Логотип компании» и «Вид входа») вам необходимо настроить ограничения «вертикальный центр в контейнере» и «горизонтальный центр в контейнере» с некоторым уменьшенным приоритетом. Далее вам нужно определить ограничения «Вертикальное пространство» и «горизонтальное пространство», используя правила с такими отношениями, как «Меньше или равно».

Я достиг такого поведения только с помощью Interface Builder.

Также вы можете комбинировать «меньше или равно» с «большим или равным» с использованием разных приоритетов для достижения наилучшего результата.

+0

Я попытался сделать это сам, но ограничение центра y, казалось, вызывало мне некоторые проблемы – BytesGuy