gpt4 book ai didi

ios - 尺寸等级的约束在哪里更新?

转载 作者:行者123 更新时间:2023-11-29 12:21:01 27 4
gpt4 key购买 nike

我在界面生成器中有一个约束,它有一个默认值和一个紧凑的宽度值。我将此约束链接到 IBOutlet,因此我可以在运行时获取代码中的常量值。如果我在 iPhone 4S 模拟器上运行,在 viewDidLoad 中常量是默认值。 willTransitionToTraitCollectionviewWillTransitionToSize 都没有被调用,但在某些时候约束被更新为紧凑值,因为稍后它是正确的。 UIViewController 在哪里更新约束?这不是 updateViewConstraints

更新:建议的viewDidLayoutSubviewstraitCollectionDidChange 方法也不是常量改变的地方:

override func viewDidLayoutSubviews() {
println("Before viewDidLayoutSubviews: \(self.navControllerBottomSpaceConstraint.constant)")
super.viewDidLayoutSubviews()
println("After viewDidLayoutSubviews: \(self.navControllerBottomSpaceConstraint.constant)")
}

override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
println("Before traitCollectionDidChange: \(self.navControllerBottomSpaceConstraint.constant)")
super.traitCollectionDidChange(previousTraitCollection)
println("After traitCollectionDidChange: \(self.navControllerBottomSpaceConstraint.constant)")
}

输出:

Before viewDidLayoutSubviews: 20.0
After viewDidLayoutSubviews: 20.0
Before viewDidLayoutSubviews: 20.0
After viewDidLayoutSubviews: 20.0
Before viewDidLayoutSubviews: 20.0
After viewDidLayoutSubviews: 20.0
Before viewDidLayoutSubviews: 20.0
After viewDidLayoutSubviews: 20.0
Before traitCollectionDidChange: 20.0
After traitCollectionDidChange: 20.0
Before viewDidLayoutSubviews: 0.0
After viewDidLayoutSubviews: 0.0
Before viewDidLayoutSubviews: 0.0
After viewDidLayoutSubviews: 0.0

最佳答案

感谢 Matt 和 Sega-Zero 为我指明了正确的方向。

答案是在 View 进入 View 层次结构后,约束在 View 的第一个 layoutSubviews 中更新。所以在你的 View Controller 中你可以这样做:

override func viewDidLayoutSubviews() {
if self.propertyCalculatedFromConstraints == nil && self.view.window != nil {
// constraints and sizes are now valid
self.propertyCalculatedFromConstraints = self.constraint.constant
}
super.viewDidLayoutSubviews()
}

override func viewDidDisappear() {
self.propertyCalculatedFromConstraints = nil
super.viewDidDisappear()
}

关于ios - 尺寸等级的约束在哪里更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30645465/

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