Не удается автоматически настроить макеты и представления стека для автоматической настройки (Swift 3, Xcode 8)

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

Интерфейс приложения

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

  • Строка состояния вертикального стека
  • Секция 1 вертикальный стек
  • 1-й делитель (это просто вид с высотой 0,5 и не внутри стека)
  • Раздел 2, который содержит 2 горизонтальных стека внутри основного вертикального стека
  • 2-й делитель (точно так же, как 1-й делитель только между разделами 2 и 3)
  • Раздел 3 содержит вертикальный пакет и горизонтальный пакет внутри основного вертикального пакета

И все эти стеки плюс 2 делителя сгруппированы в один супер вертикальный стек, называемый пользовательским интерфейсом.

Одна из моих проблем заключается в том, что я не могу установить верхние и нижние ограничения между своими стеками и делителями. В нынешнем виде между разделами и разделителями слишком много места для моей симпатии. Если вы посмотрите на изображение 1, я попытался установить верхнее ограничение 15 между разделом 1 и строкой состояния. Я также пытался установить верхнее ограничение 15 между моим 1-м делителем и разделом 1, и так далее, и тому подобное. У меня противоречивые ограничения, и я просто не могу понять, почему. Все, что они говорят, это Section1.top = Status Bar.bottom + 15, 1st Divider.top = Section1.bottom + 15 и т.д. Есть идеи, как разрешить конфликт? Каждый раз, когда я пытаюсь переместить разделитель, он возвращается на прежнее место, и корректировка номеров ограничений приводит к одним и тем же ошибкам.

Вторая проблема заключается в том, что я не могу заставить пользовательский интерфейс вписываться в его супер вид. Я хочу, чтобы мое приложение вписывалось во все размеры экрана iPhone и автоматически настраивалось соответствующим образом. То, что я пытался сделать, это использовать меню булавок и закреплять каждую сторону моего стека интерфейса пользователя с ограничением 0 (ограничение на поля не проверено). Пользовательский интерфейс выровнен и без каких-либо конфликтов, но тогда все мои стеки сжимаются, как показано на рисунке 2. Это приводит к паре ошибок, говорящих о том, что некоторые высоты и вертикальные позиции моих меток неоднозначны:

  • Height and vertical position are ambiguous for "Bill Amount Text Field".
  • Height is ambiguous for "BILL AMOUNT".
  • Height and vertical position are ambiguous for "Tip Percent Segment Control".

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

Любая помощь будет принята с благодарностью, или, если я все сделаю неправильно, пожалуйста, дайте мне знать. Я использую Xcode 8 beta 4 и написал приложение в Swift 3.0.

2 ответа

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

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

TL;DR;

Из моего опыта. Прекратите использовать Interface Builder и создайте все представления в коде. С новой системой привязки или фреймворками, такими как SnapKit, это очень просто. Преимущества, которые вы получаете:

  • Ускоренное развитие (после некоторого времени практики)
  • Нет глупых предупреждений от Interface Builder
  • Легче объединяться, когда вы работаете в команде
  • XCode почти никогда не падает

Я боролся с IB в течение нескольких месяцев, и теперь я полностью счастлив. Удачи.

Другие вопросы по тегам