我有一个UIStackView,内部有几个排列的视图,可以使用按钮来显示和隐藏。我通过以下方式为更改设置动画:-最初将某些子视图的alpha设置为0且isHidden = true-在一个动画块中,切换哪个子视图具有alpha = 1和isHidden = false
我创建了一个游乐场来显示问题:https://gist.github.com/krummler/d0e8db8cb037ae7202f7d801d3114111
简而言之,这适用于两个视图:在任何两个子视图之间切换都可以。当按下三分之一时,视图会崩溃并且拒绝返回。之后,显示子视图变得一团糟。
我的问题:-我丢失了某些东西还是在UIKit中遇到了一些错误?-我该如何解决这个问题,或者有更好的方法来实现我想要做的事情?
很难说如何实现UIStackView,但是它可能使用KVO(K ey V alue O观察)观察isHidden
并在isHidden
时更新其布局。被修改。
也许这是一个UIKit错误,但是作为一种解决方法,您可以修改resetSubviews(to:)
实现,以便仅在状态实际更改时才设置isHidden
。
private func resetSubviews(to view: UIView) {
view1.alpha = view == view1 ? 1 : 0
view2.alpha = view == view2 ? 1 : 0
view3.alpha = view == view3 ? 1 : 0
view4.alpha = view == view4 ? 1 : 0
let updateIsHiddenForView = { (viewToUpdate: UIView) in
let isHidden = view != viewToUpdate
if isHidden != viewToUpdate.isHidden {
viewToUpdate.isHidden = isHidden
}
}
updateIsHiddenForView(view1)
updateIsHiddenForView(view2)
updateIsHiddenForView(view3)
updateIsHiddenForView(view4)
}