我在mainStackView(UIStackView)中工作,它有4个水平子视图(行),它工作正常如下(mainStackView使用AutoLayout约束进行管理):
rowsArray = Array<UIView>()
for _ in 0...3 {
let row = UIView()
row.backgroundColor = UIColor.randomColor() //color for debugging
rowsArray.append(row)
}
mainStackView = UIStackView(arrangedSubviews: rowsArray)
mainStackView.axis = .vertical
mainStackView.alignment = .fill
mainStackView.distribution = .fillEqually
mainStackView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(mainStackView)
现在,鉴于每个子视图(在这种情况下为行)中将包含许多水平子视图,我需要arrangeSubviews为Array,但它无法显示任何子视图。
rowsArray = Array<UIStackView>()
for _ in 0...3 {
let row = UIStackView()
row.backgroundColor = UIColor.randomColor() //color for debugging
rowsArray.append(row)
}
任何想法为什么UIStackView不像超类(UIView)那样,或者是否有任何其他考虑以编程方式嵌套UIStackViews
Rgds ... e
答案 0 :(得分:1)
这不是一个错误,它的设计就是这样,请阅读以下docs的摘录,管理堆栈视图的外观:
UIStackView是UIView的非渲染子类;也就是说,它不提供自己的任何用户界面。相反,它只管理其排列视图的位置和大小。因此,某些属性(如backgroundColor)对堆栈视图没有影响。
这意味着UIStackView
不是经典UIView
,而是布局其子视图的一个很好的界面。创建没有排列子视图的UIStackView
是没有意义的(这是你的情况)。
为您创建的行添加子视图,将其背景颜色设置为红色,您将看到:
rowsArray = Array<UIStackView>()
for _ in 0...3 {
let row = UIStackView()
let view = UIView()
view.backgroundColor = UIColor.randomColor() //color for debugging
row.addArrangedSubview(view)
rowsArray.append(row)
}
关于嵌套的stackViews,我已经使用了很长时间没有问题,所以我相信这是一种方法。