gpt4 book ai didi

ios - 动画 subview AutoLayout 约束更改

转载 作者:行者123 更新时间:2023-12-01 17:35:48 26 4
gpt4 key购买 nike

许多关于动画 AutoLayout 约束的教程建议更新约束的常量属性,然后调用 layoutIfNeeded()在动画 block 中。

我的情况有点棘手。
我有一个包含 3 个 subview 的 View 。这个 super View 的高度不是固定的——它被计算为其 subview 的高度之和。
在某些情况下,我要求这 3 个 subview 之一切换它的高度(它在 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()
}
}
}

不幸的是,这并不像我预期的那样工作。
我可以看到我的 subview 高度的平滑变化,但是在我为我的 subview 高度约束设置新值后,我的父 View 的高度会立即重新计算。

我想看到 super View 的高度随着其 subview 的增加或减少而逐渐增加/减少。

请有人指出我正确的方向。任何帮助表示赞赏。

非常感谢!

最佳答案

动画 block 应该在 UIView包含 3 MySubviews .里面MySubview类你只更新高度约束的常量:

在 subview

func toggleHeight() {
let newHeight = isVisibleInContext ? 30 : 0
heightConstraint.constant = newHeight
}

然后在 UIView包含 3 MySubviews您为更改设置动画:

在监督
func toggleHeight(with subview: MySubview) {
subview.toggleHeight()
UIView.animate(withDuration: 0.8) {
self.view.layoutIfNeeded()
}
}

enter image description here

关于ios - 动画 subview AutoLayout 约束更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368983/

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