Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 嵌套UI视图在编程UI中不起作用_Ios_Uiview_Uistackview - Fatal编程技术网

Ios 嵌套UI视图在编程UI中不起作用

Ios 嵌套UI视图在编程UI中不起作用,ios,uiview,uistackview,Ios,Uiview,Uistackview,我在一个具有4个水平子视图行的mainStackView UIStackView中工作,它工作正常,如下所示:mainStackView使用自动布局约束进行管理: rowsArray = Array<UIView>() for _ in 0...3 { let row = UIView() row.backgroundColor = UIColor.randomColor() //color for debugging

我在一个具有4个水平子视图行的mainStackView UIStackView中工作,它工作正常,如下所示:mainStackView使用自动布局约束进行管理:

    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)
现在,假设本例中的每个子视图行中都有许多水平子视图,我需要将ArrangedSubview设置为数组,但它无法显示任何子视图

    rowsArray = Array<UIStackView>()
    for _ in 0...3 {
        let row = UIStackView()
        row.backgroundColor = UIColor.randomColor() //color for debugging
        rowsArray.append(row)
    }
了解为什么UIStackView没有表现为超类UIView,或者是否有任何其他考虑因素以编程方式嵌套UIStackView吗


Rgds。。。e

这不是一个bug,它就是这样设计的,请阅读“管理堆栈视图外观”一节的以下摘录:

UIStackView是UIView的一个非描述子类;也就是说,它不提供自己的任何用户界面。相反,它只管理其排列视图的位置和大小。因此,某些属性(如backgroundColor)对堆栈视图没有影响

这意味着UIStackView不是一个经典的UIView,而是一个很好的用于布局其子视图的界面。创建一个没有排列子视图的视图是没有意义的,这就是您的情况

将子视图添加到您创建的行中,将其背景色设置为红色,您将看到:

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,我已经使用了相当长的一段时间,没有任何问题,所以我相信这是一条路。

Thx@millan Nosál'。在做一些休息时,我发现框架在调试器中被正确地布置,UIStackView的backgroundColor属性为零。。。。当我看到你的答案。这是有道理的。。。添加容器视图应该可以解决这个问题。谢谢。。。。