如何在UIStackView中添加前导填充添加

这是我的设置:我有一个UIScrollView与领先的,顶部,试验边设置为0.在这里我添加一个UIStackView这个约束:

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

在堆栈视图内添加一些视图。
我的问题是,由于约束,添加到堆栈视图的第一个视图也将有前沿= 0。

有什么办法,我可以添加一些填充到第一个视图? 不调整滚动视图约束。

你提供的解决scheme不会在你的UIStackView里为你的视图添加填充(就像你想要的那样),但是它为UIStackView添加了一个前导。

一个解决scheme可能是在原来的UIStackView中添加另一个UIStackView,并将其引导到这个新的UIStackVIew。 然后,将您的意见添加到这个新的UIStackView。

提示,你可以完全使用Interface Builder来完成。 换句话说,不需要为它编写代码。

isLayoutMarginsRelativeArrangement属性为true时,堆栈视图将布置其布局视图相对于其布局边距。

 stackView.layoutMargins = UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20) stackView.isLayoutMarginsRelativeArrangement = true 

但是它会影响堆栈视图中所有排列的视图。 如果你只想为一个排列的视图填充,你需要使用嵌套的UIStackView

我发现约束不起作用,或者他们的工作有点奇怪(如果我添加领先/尾随约束select图像stackview,这也增加了导致collectionview,但不添加尾随;这是肯定的冲突)。

stackview里面的stackview

所以你可以为stackview中的所有views / stackviews做布局边距。

select大小检查器 – > 布局边距显式 ) – >添加你的填充

故事板

什么对我来说是添加到堆栈查看另一个UIView只是一个间隔(工作至less与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)... 

使用间距来隔开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)

如果您只需要填充,那么您可以将堆栈视图的alignment方式设置为“拖尾”,然后您可以自由地为其包含的每个子视图指定唯一的Leading约束。

作为奖励,您还可以将堆栈视图的alignment方式设置为“中心”,然后可以使用前导约束和/或尾随约束来在每个项目的两侧填充自己的填充。

看来解决scheme非常简单。 代替:

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

我刚刚写道:

 stackView.leadingAnchor.constraintEqualToAnchor(selectedContactsScrollView.leadingAnchor, constant: 15).active = true