【发布时间】:2019-02-21 10:50:21
【问题描述】:
许多关于动画自动布局约束的教程建议更新约束的常量属性,然后在动画块中调用layoutIfNeeded()。
我的情况有点棘手。 我有一个包含 3 个子视图的视图。这个超级视图的高度不是固定的——它被计算为其子视图的高度之和。 在某些情况下,我要求这 3 个子视图之一切换它的高度(它在 0 到 30 之间变化,即我想平滑地隐藏和显示它)。 代码类似这样:
// In superview
subview1.isVisibleInContext = !subview1.isVisibleInContext
// In subview
class MySubview: UIView {
@IBOutlet var heightConstraint: NSLayoutConstraint!
var isVisibleInContext = false {
didSet {
updateHeight()
}
}
func toggleHeight() {
let newHeight = isVisibleInContext ? 30 : 0
layoutIfNeeded()
heightConstraint.constant = newHeight
UIView.animate(withDuration: 0.8) {
self.layoutIfNeeded()
}
}
}
不幸的是,这并没有像我预期的那样工作。 我可以看到我的子视图高度的平滑变化,但是在我为我的子视图高度约束设置新值后,我的父视图的高度会立即重新计算。
我希望看到超级视图的高度随着其子视图的增加或减少而逐渐增加/减少。
请有人指出我正确的方向。任何帮助表示赞赏。
非常感谢!
【问题讨论】:
标签: ios autolayout nslayoutconstraint uiviewanimation ios-autolayout