【发布时间】:2017-10-22 22:49:22
【问题描述】:
我想将一组自定义视图水平放置在UIStackView 中。
每个子视图都有一个宽度和高度equal to constant 约束:
let stack = UIStackView(frame: frameRect)
stack.axis = UILayoutConstraintAxis.horizontal
stack.distribution = UIStackViewDistribution.equalSpacing
stack.layoutMargins = UIEdgeInsets(top: 0, left: 40, bottom: 0, right: 40)
stack.isLayoutMarginsRelativeArrangement = true
for i in 1...3 {
let numberView = RotatingNumberView()
numberView.heightAnchor.constraint(equalToConstant: CGFloat(cellSize))
numberView.widthAnchor.constraint(equalToConstant: CGFloat(cellSize))
numberViews.append(numberView)
stack.addArrangedSubview(numberView)
}
如果我更改为fillEqually 分布,则会显示子视图,但它们的宽度会被拉伸以填充 stackView。
我猜这与拥抱或抗压优先级有关,但在子视图中设置这些不起作用。
这里发生了什么?
【问题讨论】:
-
首先,你为什么不使用故事板???
-
@UmerFarooq 我必须以编程方式添加子视图,因为无法事先确定子视图的数量。
-
对于除
fillEqually分布之外的所有分布,堆栈视图在计算其沿堆栈轴的大小时使用每个排列视图的intrinsicContentSize属性。 -
如果子视图是动态的,Collection View 不是一个好的选择吗?
-
你能添加一些图片吗?你现在的输出?你想要它是什么?如果可能的话?
标签: ios swift autolayout uistackview