Как организовать UIStackViews?

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

Например, в приведенном ниже представлении я должен использовать:

  1. Один большой StackView на вертикальной оси, покрывающий весь суперпредставление.
  2. Три StackViews с обычными ограничениями, связывающими их друг с другом и суперпредставлением.
  3. Один большой StackView, который покрывает весь суперпредставление с тремя представлениями стека в этом представлении.
  4. Нет StackViews, это представление не подходит

В общем, как мне решить, как мне размещать свои стеки и использовать ли их?

Пример представления


person Declan McKenna    schedule 28.02.2017    source источник


Ответы (2)


Я начал использовать представления стека все больше и больше, особенно после Xcode 8.x. Каждое добавленное вами представление стека избавляет вас от добавления некоторых ограничений автоматического макета (для трех вертикально расположенных меток в представлении, вероятно, потребуется 9 ограничений, а при представлении стека их может быть всего 3).

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

В Xcode 7.x были проблемы с неправильным вычислением внутренних размеров UILabels. В этих случаях вы можете установить собственный размер заполнителя для каждой метки в инспекторе размеров.

Эта проблема в стороне, получить стек!

person Ashley Mills    schedule 28.02.2017
comment
В моем примере выше проблема, с которой я сталкиваюсь со StackViews, заключается в том, что расстояния между каждым представлением не равны. Пространство между 2-м и 3-м, а также 4-м и 5-м видом вниз больше в дизайне, который мне дали. - person Declan McKenna; 08.03.2017
comment
Если вам нужно добавить дополнительный интервал, вы можете удалить пустой UIView и установить его ограничение по высоте. - person Ashley Mills; 08.03.2017
comment
Я думаю, что эта точка зрения может быть неприемлемой, если целью является минимизация ограничений. Мне больше не нужны три ограничения между 1-м/2-м, 3-м/4-м, 5-м/6-м представлениями, и мне не нужны конечные/начальные ограничения для представлений коллекции, которые занимают ширину стека, но я должен добавить два новых представления, которые потребуется по 3 ограничения для каждого (начальный конец, высота) и потребуется три ограничения для самого StackView, чтобы получить чистый выигрыш в размере 3 дополнительных ограничений. - person Declan McKenna; 15.03.2017
comment
Если представления имеют одинаковый размер, интервал или начальные/конечные ограничения, я вижу, что это сводит к минимуму мои ограничения, но, поскольку все эти вещи разные, кажется, что это добавляет сложности, а не устраняет ее. - person Declan McKenna; 15.03.2017

У меня проблема, и я не вижу ваш снимок экрана, но у меня есть несколько моментов, которые помогут вам решить:

  • Используйте стековые представления для всех линейных упорядоченных представлений.
  • Я предпочитаю установить представление корневого стека на размер, который содержит точно содержимое без пробелов (поэтому ограничьте его размером суперпредставления, только если это размер содержимого)
  • Представление стека использует автоматическую компоновку для определения размера своих подпредставлений, поэтому вы должны проверить, что ваши подпредставления действительно указывают свой наиболее подходящий размер - возможно, с помощью innerContentSize() [только при необходимости!] (будьте осторожны с этим)
  • вы можете попрактиковаться в представлениях стека в конструкторе интерфейсов, попробовать изменить свойства представления стека, скрыть подпредставления (со скрытым свойством) и поиграть с ограничениями, это здорово!

Удачи =] Приятной игры

person Yitzchak    schedule 28.02.2017
comment
Какое преимущество вы получаете, устанавливая размер для содержимого, а не для супервизора? - person Declan McKenna; 01.03.2017
comment
Когда представление является подвидом корневого представления, и вы не можете изменить его размер - person Yitzchak; 01.03.2017