gpt4 book ai didi

ios - (取消)激活约束如何在内部工作?

转载 作者:行者123 更新时间:2023-11-28 23:57:12 27 4
gpt4 key购买 nike

我注意到,当我激活约束时,我会立即在该行代码处收到一条警告,指出不能同时满足约束。

我假设布局是在“UI 更新周期”之类的稍后时间点计算的,而不是每次约束都被(取消)激活。因此,在(取消)激活约束的代码块中,必须注意顺序,以便布局始终可满足。对吗?

是否有一些优雅的方法来重写以下代码,以便它不会因两个约束同时处于事件状态而触发警告?

func switchConstraints() {
constraint1.isActive = flag
constraint2.isActive = !flag
}

最佳答案

一种选择是覆盖 updateViewConstraints()。您可以在那里激活/停用您的约束,而不会出现警告。

按照这些思路:

@IBAction func doUp(_ sender: Any) {
flag = !flag
self.view.setNeedsUpdateConstraints()
}

override func updateViewConstraints() {
constraint1.isActive = flag
constraint2.isActive = !flag
super.updateViewConstraints()
}

另一种选择是激活两个约束,但给它们不同的优先级。然后更改优先级而不是激活/停用:

    // in viewDidLoad, or wherever you created the constraints
constraint1.priority = .defaultHigh
constraint2.priority = .defaultLow

constraint1.isActive = true
constraint2.isActive = true

然后,也许在点击按钮时:

    @IBAction func doUp(_ sender: Any) {
flag = !flag
constraint1.priority = flag ? .defaultHigh : .defaultLow
constraint2.priority = flag ? .defaultLow : .defaultHigh
}

关于ios - (取消)激活约束如何在内部工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50862930/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com