动画UIStackView子视图导致布局问题

问题描述 投票:0回答:1

我有一个UIStackView,内部有几个排列的视图,可以使用按钮来显示和隐藏。我通过以下方式为更改设置动画:-最初将某些子视图的alpha设置为0且isHidden = true-在一个动画块中,切换哪个子视图具有alpha = 1和isHidden = false

我创建了一个游乐场来显示问题:https://gist.github.com/krummler/d0e8db8cb037ae7202f7d801d3114111

简而言之,这适用于两个视图:在任何两个子视图之间切换都可以。当按下三分之一时,视图会崩溃并且拒绝返回。之后,显示子视图变得一团糟。

我的问题:-我丢失了某些东西还是在UIKit中遇到了一些错误?-我该如何解决这个问题,或者有更好的方法来实现我想要做的事情?

ios swift xcode uikit uistackview
1个回答
0
投票

很难说如何实现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)
    }
© www.soinside.com 2019 - 2024. All rights reserved.