以编程方式向垂直堆栈视图添加视图会中断垂直堆栈视图的约束

时间:2017-02-27 14:06:09

标签: swift xcode uiview uistackview

所以我在一个简单的布局中有一个垂直堆栈视图。当我通过Interface Builder添加视图时,我看到堆栈视图中的视图没有问题。

Just adding a "Blue" view to UIStackView

然后,当我以编程方式将视图添加到UIStackView时,它会破坏约束,并且添加的视图将显示在窗口的顶部。我很困惑为什么它会破坏堆栈视图的约束。

 func buildCats(theJson:JSON){
     //self.verticalStack.subviews.forEach({ $0.removeFromSuperview() })
    print(theJson)
    if let infos = self.swiftyJsonvar["info"].array{
        for info in infos{
            guard let v = UINib(nibName: "ticketOrderView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as? UIView else { return }
            v.translatesAutoresizingMaskIntoConstraints = false
            self.verticalStack.addArrangedSubview(v)

        }
    }
}

As you can see the added view show up WAY Outside of the vertical stack view..

1 个答案:

答案 0 :(得分:0)

添加的子视图需要约束,因为它们没有内在大小。尝试:

v.heightAnchor.constraint(greaterThanOrEqualToConstant:30).isActive = true v.widthAnchor.constraint(greaterThanOrEqualToConstant:200).isActive = true

嗯....我现在怀疑这个......我怀疑这个问题可能与在后台线程上添加视图有关。也许在主线程上运行循环?

编辑2:啊......我现在打赌的问题与你在“ticketOrderView”中查看/子视图的内容有关

有关示例,请参阅:https://github.com/DonMag/ScratchPad