Как добавить ведущее дополнение для просмотра, добавленное внутри UIStackView
Это моя настройка: у меня есть UIScrollView
с ведущим, верхним, пробным краем, установленным в 0. Внутри этого я добавляю UIStackView
С этим ограничения:
stackView.centerYAnchor.constraintEqualToAnchor(selectedContactsScrollView.centerYAnchor).active = true
stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor).active = true
внутри стека я добавляю некоторые виды.
Моя проблема заключается в том, что из-за ограничений первый вид просмотр в стек также будет ведущей кромки = 0.
Каковы способы, которыми я мог бы добавить некоторые дополнения к первому представлению ? Без настройки ограничений вида прокрутки.
9 ответов:
решение, которое вы предоставили, не добавляет заполнение для ваших представлений внутри вашего UIStackView (как вы хотели в вопросе), но он добавляет ведущий для UIStackView.
решение может состоять в том, чтобы добавить еще один UIStackView внутри вашего исходного UIStackView и дать ведущий к этому новому UIStackVIew. Затем добавьте свои представления в этот новый UIStackView.
подсказка, вы можете сделать это полностью с помощью Interface Builder. Другими словами, нет необходимости писать код для него.
, когда
isLayoutMarginsRelativeArrangement
свойство true, представление стека будет размещать свои упорядоченные представления относительно полей макета.stackView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20) stackView.isLayoutMarginsRelativeArrangement = true
но это влияет на все упорядоченные виды внутри к виду стека. Если вы хотите, чтобы это дополнение было только для одного упорядоченного представления, вам нужно использовать вложенный
UIStackView
Я обнаружил, что ограничения там не работают, или они работают странно (например, если я добавляю ограничение leading/trailing к выбранному на image stackview, что также добавляет ведущий к collectionview, но не добавляет трейлинг; и это наверняка конфликт).
таким образом, вы можете сделать поля макета для всех видов/ stackviews внутри stackview.
выберите размер инспектор ->поля макета (явно) - > добавить дополнение
то, что сработало для меня, - это добавить в stack view еще один UIView, который является просто разделителем (работает, по крайней мере, с stackView.распределение. = Заполнить):
let spacerView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 10)) stackView.addArrangedSubview(spacerView) stackView.addArrangedSubview(viewThatNeedsSpaceBeforeIt) stackView.addArrangedSubview(NextView)...
используйте интервал для размещения элементов в stackview:
let bottomStackView = UIStackView() bottomStackView.alignment = .Center bottomStackView.axis = .Horizontal bottomStackView.spacing = 8.0
swift 3: Вам просто нужно установить смещение:
firstView.leadingAnchor.constraint(equalTo: parentView.leadingAnchor, constant: 200).isActive = true
убедитесь, что это ограничение задается после
parentView.addArrangdSubView(firstView)
Если вам нужно только ведущее заполнение, то вы можете установить выравнивание вида стека в "трейлинг", а затем вы сможете указать уникальные ведущие ограничения для каждого из содержащихся в нем подвидов.
в качестве бонуса вы также можете установить выравнивание вида стека в "центр", а затем вы можете использовать ведущие и/или конечные ограничения, чтобы дать каждому элементу свое собственное заполнение с обеих сторон.