Не удается автоматически настроить макеты и представления стека для автоматической настройки (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 в течение нескольких месяцев, и теперь я полностью счастлив. Удачи.