layoutIfNeeded 是否可以在每次加载视图时只调用一次 - 例如查看是否加载?
Can layoutIfNeeded be called only once per loading the view - e.g. viewDidLoad?
当用户与应用程序交互时,我的视图控制器中的视图高度需要更改。有时视图的高度需要更大,有时则需要更短,具体取决于用户拥有的选项数量。
我已经实现了一个根据视图状态改变高度的方法,我在viewDidLoad
中调用这个方法来设置初始状态,每当状态改变时我都会调用这个方法。
但是,视图实际更新布局的唯一时间是 viewDidLoad
中的调用。我的方法的所有其他调用都不会更新视图。
func updateContainerViewHeight(constant: CGFloat) {
print("lets update")
baseView.heightAnchor.constraint(equalToConstant: constant).isActive = true
containerView.heightAnchor.constraint(equalToConstant: constant).isActive = true
self.view.setNeedsLayout()
UIView.animate(withDuration: 0.25) {
self.view.layoutIfNeeded()
}
}
仅供参考 print("let's update")
正在控制台中打印。
如这里
baseView.heightAnchor.constraint(equalToConstant: constant).isActive = true
containerView.heightAnchor.constraint(equalToConstant: constant).isActive = true
每次调用都会添加会导致冲突的新约束,因此创建
1-
var baseCon,containCon:NSLayoutConstraint!
2-
baseCon = baseView.heightAnchor.constraint(equalToConstant: constant)
baseCon.isActive = true
containCon = containerView.heightAnchor.constraint(equalToConstant: constant)
containCo.isActive = true
3-然后玩常量
baseCon.constant = ////
当用户与应用程序交互时,我的视图控制器中的视图高度需要更改。有时视图的高度需要更大,有时则需要更短,具体取决于用户拥有的选项数量。
我已经实现了一个根据视图状态改变高度的方法,我在viewDidLoad
中调用这个方法来设置初始状态,每当状态改变时我都会调用这个方法。
但是,视图实际更新布局的唯一时间是 viewDidLoad
中的调用。我的方法的所有其他调用都不会更新视图。
func updateContainerViewHeight(constant: CGFloat) {
print("lets update")
baseView.heightAnchor.constraint(equalToConstant: constant).isActive = true
containerView.heightAnchor.constraint(equalToConstant: constant).isActive = true
self.view.setNeedsLayout()
UIView.animate(withDuration: 0.25) {
self.view.layoutIfNeeded()
}
}
仅供参考 print("let's update")
正在控制台中打印。
如这里
baseView.heightAnchor.constraint(equalToConstant: constant).isActive = true
containerView.heightAnchor.constraint(equalToConstant: constant).isActive = true
每次调用都会添加会导致冲突的新约束,因此创建
1-
var baseCon,containCon:NSLayoutConstraint!
2-
baseCon = baseView.heightAnchor.constraint(equalToConstant: constant)
baseCon.isActive = true
containCon = containerView.heightAnchor.constraint(equalToConstant: constant)
containCo.isActive = true
3-然后玩常量
baseCon.constant = ////