Swift SnapKit动态高度问题

时间:2019-05-20 11:55:01

标签: swift constraints snapkit

我在 DispatchQueue.main.async 上使用了snapKit来以编程方式设置约束。但是我注意到 main.async 有时会导致冻结UI,并且我更改了使用它的方法。现在我有使用动态高度的问题,当我尝试使动态高度取决于内容时,旧方法会导致错误...

旧方法(innerView-是视图的子视图)

DispatchQueue.main.async {
        view.snp.makeConstraints({ (make) in
            make.top.equalToSuperview().inset(45)
            make.left.right.equalToSuperview().inset(12)
            make.bottom.equalTo(self.innerView.snp.bottom).offset(12)
        })
    }
//After i add it like superView.addSubView(view)
//superView contains view, and view(dynamic height) contains innerView

新方法

superView.addSubview(view)
view.snp.makeConstraints({ (make) in
            make.top.equalToSuperview().inset(45)
            make.left.right.equalToSuperview().inset(12)
            make.bottom.equalTo(self.innerView.snp.bottom).offset(12)
        })

enter image description here

2 个答案:

答案 0 :(得分:0)

在设置约束之前,您必须同时添加两者

superView.addSubview(view)
superView.addSubview(innerView) //  or view.addSubview(innerView) if it's nested UI
view.snp.makeConstraints({ (make) in
     make.top.equalToSuperview().inset(45)
     make.left.right.equalToSuperview().inset(12)
     make.bottom.equalTo(self.innerView.snp.bottom).offset(12)
})

答案 1 :(得分:0)

我发现了问题,以防万一有人需要它...在添加所有Superview约束后,添加make.bottom.equalTo(self.innerView.snp.bottom).offset(12)即可!< / p>