Swift 以编程方式将视图添加到垂直堆栈视图会打破垂直堆栈视图的约束

Swift 以编程方式将视图添加到垂直堆栈视图会打破垂直堆栈视图的约束,swift,xcode,uiview,uistackview,Swift,Xcode,Uiview,Uistackview,因此,我有一个简单布局中的垂直堆栈视图。当我通过Interface Builder添加视图时,我在堆栈视图中看到该视图没有问题 然后,当我以编程方式将视图添加到UIStackView时,它会打破约束,添加的视图将显示在窗口顶部。我不明白为什么它会打破堆栈视图的约束 func buildCats(theJson:JSON){ //self.verticalStack.subviews.forEach({ $0.removeFromSuperview() }) print(th

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

然后,当我以编程方式将视图添加到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)

        }
    }
}

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

v、 heightAnchor.constraint(大于或等于常量:30)。isActive=true v、 widthAnchor.constraint(大于或等于常量:200)。isActive=true

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

编辑2:啊。。。我现在打赌的问题与“TickerDerView”中的视图/子视图相关

例如,请参见:

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

v、 heightAnchor.constraint(大于或等于常量:30)。isActive=true v、 widthAnchor.constraint(大于或等于常量:200)。isActive=true

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

编辑2:啊。。。我现在打赌的问题与“TickerDerView”中的视图/子视图相关


例如,请参见:

我认为这可能是因为您正在禁用具有以下行的视图的自动布局:
v.translatesAutoResizezingMaskintoConstraints=false
。因此,尽管堆栈视图具有自动布局,但新视图在我通过IB输入的视图上没有自动布局。它只是由堆栈视图负责。我删除了这一行,并尝试将其设置为TRUE,每次都得到相同的行为。您不使用tableview的具体原因是什么?您可以使用自己的约束为其设计一个tablecell。我没有以编程方式使用堆栈视图,但我非常确定添加的视图将需要布局约束(顶部、底部、前导和尾随)我想这可能是因为您正在禁用视图的自动布局,这行代码是:
v.translatesAutoResizezingMacSkinToConstraints=false
。因此,尽管堆栈视图具有自动布局,但新视图在我通过IB输入的视图上没有自动布局。它只是由堆栈视图负责。我删除了这一行,并尝试将其设置为TRUE,每次都得到相同的行为。您不使用tableview的具体原因是什么?您可以使用自己的约束为其设计一个tablecell。我没有以编程方式使用堆栈视图,但我非常确定添加的视图将需要布局约束(顶部、底部、前导和尾随)