【问题标题】:Nested UIStackViews not working in programmatic UI嵌套的 UIStackViews 在编程 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

【问题讨论】:

    标签: ios uiview uistackview


    【解决方案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 属性为零....当我看到你的答案时。这是有道理的......添加一个容器视图应该可以解决它。谢谢....
    猜你喜欢
    • 1970-01-01
    • 2017-08-08
    • 2016-10-03
    • 2015-01-11
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多