Как добавить начальное дополнение для просмотра, добавленное внутри UIStackView
Это моя настройка: у меня есть UIScrollView
с ведущим, верхним, пробным фронтом, установленным в 0. Внутри этого я добавляю UIStackView
с этими ограничениями:
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
Внутри представления стека я добавляю несколько просмотров.
Моя проблема заключается в том, что из-за ограничений первый вид, добавленный в представление стека, также будет иметь передний фронт = 0.
Какими способами я могу добавить некоторые дополнения к первому виду? Без настройки ограничений просмотра прокрутки.
Ответы
Ответ 1
Решение, которое вы предоставили, не добавляет дополнение к вашим представлениям в вашем UIStackView (как вы хотели в вопросе), но добавляет лидирующую позицию для UIStackView.
Решение может состоять в том, чтобы добавить еще один UIStackView в ваш оригинальный UIStackView и дать начало этому новому UIStackVIew. Затем добавьте свои представления в этот новый UIStackView.
Подсказка: вы можете сделать это полностью с помощью Interface Builder. Другими словами, нет необходимости писать код для него.
Ответ 2
Когда свойство isLayoutMarginsRelativeArrangement
имеет значение true, представление стека будет компоновать свои упорядоченные представления относительно его полей макета.
stackView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)
stackView.isLayoutMarginsRelativeArrangement = true
Но это влияет на все упорядоченные представления внутри представления стека. Если вы хотите, чтобы это дополнение использовалось только для одного упорядоченного представления, вам нужно использовать вложенный UIStackView
Ответ 3
Я обнаружил, что ограничения не работают внутри Stack View, или они кажутся несколько странными.
(Например, если я добавлю ограничение начала/конца к выбранному в представлении стека изображений, это также добавит начало к представлению коллекции, но не добавит конечный; это наверняка будет конфликтом).
![stackview inside stackview]()
Чтобы установить поля макета для всех представлений внутри стека, выберите:
Stack View > Size Inspector > Layout Margins > Fixed
Примечание. Опция "Fixed"
ранее называлась "Explicit"
, как видно на скриншотах.
Затем добавьте свой отступ:
![storyboard]()
Ответ 4
Что сработало для меня, так это добавить в стеке другой UIView, который просто спейсер (работает как минимум с stackView.distribution =.Fill):
let spacerView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
stackView.addArrangedSubview(spacerView)
stackView.addArrangedSubview(viewThatNeedsSpaceBeforeIt)
stackView.addArrangedSubview(NextView)...
Ответ 5
Используйте пробел для размещения элементов в представлении стека:
let bottomStackView = UIStackView()
bottomStackView.alignment = .Center
bottomStackView.axis = .Horizontal
bottomStackView.spacing = 8.0
Ответ 6
скорость 3:
Вам просто нужно установить смещение на:
firstView.leadingAnchor.constraint(equalTo: parentView.leadingAnchor, constant: 200).isActive = true
Убедитесь, что это ограничение установлено после parentView.addArrangdSubView(firstView)
Ответ 7
Если вам требуется только переполнение, то вы можете установить выравнивание по стеклу в "Trailing", и тогда вы сможете указать уникальные ограничения Leading для каждого из своих содержащихся в нем представлений.
В качестве бонуса вы также можете установить выравнивание вида стека в "Центр", а затем вы можете использовать ограничения Leading и/или Trailing, чтобы каждый элемент имел свое собственное дополнение с обеих сторон.
Ответ 8
На этот вопрос уже есть хорошие ответы, хотя есть одно предположение, используйте свойство spacing
для установки расстояния между представлениями. Для первого и последнего представлений может быть два варианта: либо установить вставки в соответствии с предложением @tolpp, либо добавить ограничение, привязанное к родителю (stackview) с константой для добавления отступов.
Ответ 9
Мы добавили прозрачные компоненты (например, UIButton/UIView) в качестве первого и последнего потомка UIStackView. Затем установите ограничение ширины этих невидимых дочерних элементов, чтобы настроить отступы.
Ответ 10
Кажется, что решение было довольно простым. Вместо:
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
Я только что написал:
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor, constant: 15).active = true