嵌套的 UIStackViews 在编程 UI 中不起作用
Posted
技术标签:
【中文标题】嵌套的 UIStackViews 在编程 UI 中不起作用【英文标题】:Nested UIStackViews not working in programmatic UI 【发布时间】:2018-02-06 20:38:34 【问题描述】:我在具有 4 个水平子视图(行)的 mainStackView (UIStackView) 中工作,它工作正常,如下所示(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)
现在,考虑到每个子视图(在本例中为行)将有许多水平子视图,我需要将arrangedSubviews 设置为数组,但它无法显示任何子视图。
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
【问题讨论】:
【参考方案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,我已经使用了相当长的时间没有问题,所以我相信这是一种方法。
【讨论】:
谢谢@Milan Nosál'。做了一些休息,我发现框架在调试器中布局正确,并且 UIStackView 的 backgroundColor 属性为零....当我看到你的答案时。这是有道理的......添加一个容器视图应该可以解决它。谢谢....以上是关于嵌套的 UIStackViews 在编程 UI 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥带有 UILabel 的嵌套 UIStackViews 需要 Y 位置和高度约束?
如何控制嵌套在另一个堆栈视图中的 UIStackViews 的相对宽度?
UIScrollView 内的嵌套 UIStackViews:不填充容器的宽度?
UILabel 在嵌套的 UIStackViews 中被截断?