【发布时间】:2020-09-30 10:29:48
【问题描述】:
我正在尝试编写一些不添加两次相同约束的条件。例如,如果一个视图已经有一个底部锚约束,请不要再次添加它。所以我尝试使用布局约束标识符来唯一标识一个约束,这样如果它已经存在就不要再添加另一个约束了。我没有故事板,所以我写了以下代码:
class PDFViewer: UIViewController {
var quickLookController = QLPreviewController()
override func viewDidLoad()
if let quickView = quickLookController.view {
self.view.addSubview(quickView)
}
{
quickLookController.view.translatesAutoresizingMaskIntoConstraints = false
quickLookController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
quickLookController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
quickLookController.view.topAnchor.constraint(equalTo: navView.bottomAnchor).isActive = true
setPDFViewHeight(height: 100)
setPDFViewHeight(height: 100)
}
open func setPDFViewHeight(height: CGFloat) {
var isBottomAnchorSet = false
if let superView = quickLookController.view.superview {
for constraints in superView.constraints {
if constraints.identifier == "bottom" {
isBottomAnchorSet = true
}
else {
print(false)
}
}
}
if !isBottomAnchorSet {
quickLookController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).identifier = "bottom"
quickLookController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}
}
}
但我两次调用setPDFViewHeight 方法时都说没有名为"bottom" 的标识符,但它应该是第二次。我也尝试像下面一样直接获得超级视图的约束,但那里也有同样的问题。
for constraints in view.constraints {
if constraints.identifier == "bottom" {
isBottomAnchorSet = true
}
}
我做错了什么还是不能这样使用这个标识符?
即使是关于如何避免重复布局约束的完全不同的答案也会有所帮助。提前致谢。
【问题讨论】:
标签: ios swift xcode nslayoutconstraint