2015-12-09 3 views
1

У меня возникли проблемы с пониманием Autolayout и как это феноменально работает для всех, кроме меня. Проблема в том, что ограничения, когда они в конечном итоге работают для меня для одного разрешения, например. для iPad, не соответствуют другому, как iPhone4s или что-то в этом роде, и, следовательно, либо это приводит к конфликтующим ограничениям , либо не работает так, как я их хочу (например, кнопка будет отображаться рядом с текстовым полем на iPad и не очень рядом с iPhone). Я прочитал Учебное пособие по адаптивной макету Raywenderlich, а также Книга Стивена Липтона об автолокате (Практическая автозагрузка) и по-прежнему сталкивается с множеством проблем. Пожалуйста, помогите мне. Его так снижаетмотивациюперсонала, что я хочу отказаться вообще кодирования и в конечном итоге стать монахом или что-то ... х (AutoLayout на Xcode7

РЕДАКТИРОВАНИЕ

Таким образом, чтобы помочь вам в дальнейшем, я объясню, как нечто не работают Моя оригинальная идея состояла в том, чтобы показать 4 вида, каждая из которых содержит текстовое поле, которое будет проходить через CoreAnimation при нажатии определенной кнопки. Вид ViewController имеет изображение в фоновом режиме, кнопку «Назад» , 4 просмотра, индикатор выполнения и кнопку для отображения каждого вида. Проблемы заключаются в следующем: хотя весь вид кажется подходящим на симуляторе, я вижу конфликты в терминале xcode.

изображение со всеми элементами:

image with all elements

изображение с конфликтами:

image with conflicts

Но так или иначе, если я разрешить конфликт, то autolayout не функционирует в соответствии с требованиями по все устройства. например

нет конфликтов, но следующая кнопка скрывается на отводе TextField в iPhone4s:

no conflicts but next button is hiding on tap of textfield in iPhone4s

не где, как и в случае IPad нет конфликтов и кнопка Далее будет очень доступным:

no conflicts and Next button is very much accessible

Как я могу рассматривать это для работы на всех устройствах одинаково d когерентно. Пожалуйста, помогите спасибо.

+2

Не чувствуйте себя слишком плохо, у всех нас есть такие моменты. Можете ли вы добавить скриншот своей раскадровки (с возможными значениями ограничений)? –

+0

Проблема в целом, я не могу обойти ее.Мне нужно понять, когда нужно настроить настройку выравнивания, когда нужно использовать меню пиннинга, когда устанавливать ограничения автоматически и так много неоднозначностей, подобных этим. Однако я приложу снимки, чтобы помочь вам с тем, чего я пытаюсь достичь. Спасибо, что обратились ко мне, хотя .. –

+0

Пожалуйста, создайте ** минимальный ** пример, в котором изложена ваша проблема. Затем перечислите точно все виды и ограничения, которые у вас есть, скопируйте и вставьте (а не вставьте скриншот) любые журналы ошибок, покажите нам, что именно вы ожидаете и что именно получаете (на нескольких устройствах, если необходимо). – jcaron

ответ

1

Одна вещь, которую следует понимать, заключается в том, что AutoLayout не решит все ваши проблемы с размерами экрана, которые сильно отличаются (и у меня все еще создается впечатление, что классы размеров громоздки для использования). Обычно я использую два разных xibs для телефона и планшета, подключенных к одному контроллеру. И если вы можете отказаться от поддержки iOS 7, которая устраняет много головных болей, связанных с AutoLayout.

EDIT

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

+0

Отдельные xibs, безусловно, одно из решений, я имел удовольствие реализовать их точно, но сейчас мы продвигаемся через совершенно новый уровень развития, и сейчас я хочу расширить свой спектр в AutoLayout и на самом деле понять, что Apple поскольку AutoLayout - идеальное решение для нескольких устройств. Спасибо за ваши искренние и полезные слова, но я думаю, что я действительно хочу узнать AutoLayout heh :) –

+2

Не поймите меня неправильно, вам следует использовать автоматический макет - он работает очень хорошо в наши дни. Он просто не решает все ... – TheEye

+0

Автоматическая компоновка - лучшая вещь в Xcode. Не вводите в заблуждение, если вы не знаете/не знаете о вещах. –

1

Немногие вещи, которые я хочу поделиться с опытом работы с авто-макетом.

  1. Если вы хотите, чтобы элемент отображался в определенном положении (20 точек с правой стороны и 40 точек сверху), вам нужно настроить кнопку в раскадровке и добавить конечные и верхние ограничения. Xcode даст вам предложение исправить высоту/ширину элемента. Измените размер элемента или добавьте ограничения высоты и ширины, если вы хотите точно такую ​​же ширину по высоте, что и в раскадровке.
  2. Если вы хотите, чтобы элемент en расширялся/сокращался в соответствии с высотой ширины различных размеров экрана, добавлял -leading, -trailing, -top и нижние ограничения.
  3. Важно: Когда мы «вытаскиваем» элементы (например, кнопку) (сверху, снизу, впереди, в конце), эти ограничения добавляются относительно других элементов (например, какая-то другая кнопка). В этом случае убедитесь, что другие элементы имеют ограничения. В противном случае Xcode выдаст ошибку недостающих ограничений.
  4. Не добавляйте недостающие ограничения, поскольку Xcode предлагает, потому что Xcode добавит некоторые ограничения, которые приведут к непредвиденным размерам.

Теперь Что касается вашей проблемы: Когда клавиатура появляется либо вы можете перемещать взгляд вверх (относительно высоты клавиатуры This ответ поможет вам, если вы хотите, чтобы достичь этого без изменения ограничений программно В противном случае, если вы правильно добавили.. ограничений, чем create и IBOutlet верхнего ограничения верхнего элемента и вычитания константы высоты клавиатуры (150) из константы ограничений. Кроме того, вам необходимо добавить высоту клавиатуры (150) в константу ограничения при исчезновении клавиатуры.

0

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

Есть несколько способов решить эту проблему:

  • вы можете вставлять содержимое в Scrollview, так что пользователи могут прокручивать экран вверх и вниз, если содержимое представления прокрутки превышает доступную высоту. Здесь будет использоваться автоматическая компоновка: вы установите ограничение со дна прокрутки в нижнее руководство по макете, добавьте выход к этому ограничению, а в своем коде вы сможете наблюдать за скрытием клавиатуры/отображать/изменять уведомления и настраивать постоянная этого ограничения

  • вы настраиваете свой макет так, чтобы все было всегда видно, даже с клавиатурой вверх, без изменения положения чего-либо, будь то клавиатура вверх или нет. Это означает, что вы не используете какое-либо пространство, в котором будет отображаться клавиатура

  • Вы настраиваете динамическое расположение динамика на основе присутствия клавиатуры. Это будет сочетать ограничение, подобное тому, которое было в первом варианте, с другими ограничениями, чтобы перемещать вещи вокруг, когда этот движется.

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

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