Подтвердить что ты не робот

Как добавить начальное дополнение для просмотра, добавленное внутри UIStackView

Это моя настройка: у меня есть UIScrollView с ведущим, верхним, пробным фронтом, установленным в 0. Внутри этого я добавляю UIStackView с этими ограничениями:

stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true  
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true

Внутри представления стека я добавляю несколько просмотров.
Моя проблема заключается в том, что из-за ограничений первый вид, добавленный в представление стека, также будет иметь передний фронт = 0.

Какими способами я могу добавить некоторые дополнения к первому виду? Без настройки ограничений просмотра прокрутки.

4b9b3361

Ответ 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