Stackview inside 其他stackview宽度问题

Posted

技术标签:

【中文标题】Stackview inside 其他stackview宽度问题【英文标题】:Stackview inside Other stackview width issue 【发布时间】:2018-05-14 13:07:01 【问题描述】:

我在 IB 中创建了一个 Stackview,它具有垂直方向。此堆栈视图与父视图具有相同的宽度。

现在我以编程方式创建了一个 Stackview,例如

let stackViewHorizontal   = UIStackView()
    stackViewHorizontal.axis  = UILayoutConstraintAxis.horizontal
    stackViewHorizontal.distribution  = UIStackViewDistribution.fillEqually
    stackViewHorizontal.alignment = UIStackViewAlignment.leading
    stackViewHorizontal.spacing = 8
    stackViewHorizontal.translatesAutoresizingMaskIntoConstraints = false
    stackViewHorizontal.leadingAnchor.constraint(equalTo: mainStackView.leadingAnchor,constant:0)
    stackViewHorizontal.trailingAnchor.constraint(equalTo: mainStackView.trailingAnchor,constant:0)

这里的 mainStackView 是通过 IB 创建的 stackview。stackviewHorizo​​ntal 是通过编程创建的 stackview。 我将 UILabels 放入 stackViewHorizo​​ntal 中。我预计这将扩展到全长,并且每个 UiLabel 将占据屏幕宽度的 50%,因为 stackview 具有水平轴并且分布是 fillEqually。

但我有一个 UiLabels 水平相邻。但没有占据整个屏幕宽度

我做错了什么请通知?

【问题讨论】:

【参考方案1】:

激活约束,也给它一个高度:

    stackViewHorizontal.leadingAnchor.constraint(equalTo: mainStackView.leadingAnchor,constant:0).isActive = true
    stackViewHorizontal.trailingAnchor.constraint(equalTo: mainStackView.trailingAnchor,constant:0).isActive = true

    NSLayoutConstraint.activate([
       stackViewHorizontal.leadingAnchor.constraint(equalTo: mainStackView.leadingAnchor,constant:0), 
       stackViewHorizontal.trailingAnchor.constraint(equalTo: mainStackView.trailingAnchor,constant:0) 
    ])

//

    let stackViewHorizontal   = UIStackView()
    stackViewHorizontal.axis  = UILayoutConstraintAxis.horizontal
    stackViewHorizontal.distribution  = UIStackViewDistribution.fillEqually
    stackViewHorizontal.alignment = UIStackViewAlignment.leading
    stackViewHorizontal.spacing = 8
    self.view.addSubview(stackViewHorizontal) //// add it here 
    stackViewHorizontal.translatesAutoresizingMaskIntoConstraints = false
    stackViewHorizontal.leadingAnchor.constraint(equalTo: mainStackView.leadingAnchor, constant: 0).isActive = true
    stackViewHorizontal.trailingAnchor.constraint(equalTo: mainStackView.trailingAnchor, constant: 0).isActive = true

【讨论】:

激活后崩溃 因为他们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?这是非法的。 *** 首先抛出调用栈: 在添加约束之前将其添加到它们之间的共享父视图中,即 self.view 我没听懂

以上是关于Stackview inside 其他stackview宽度问题的主要内容,如果未能解决你的问题,请参考以下文章

隐藏stackview中的第一个子视图和其他在iOS 10.2上消失但不是11

在 Swift 中以编程方式访问和更新 stackview 中的 label.text 或其他 UILabel 属性

stackview

如何以编程方式更改 stackView 内单个 UIView 的高度?

StackView 内 UICollectionView 的动态高度

如何在水平stackview中居中按钮?