首页 > 解决方案 > UIView.transition 后单元格的结构被破坏

问题描述

在我的一个控制器中,我将 UICollectionView 与两侧单元格一起使用(单元格的正面有一个按钮,如果用户点击它,单元格应该显示他/她单元格的另一侧)。

所以我在我的单元格中有这个:

firstView = UIView()
...
self.addSubview(firstView)

infoView = UIView()
...
self.insertSubview(infoView, belowSubview: firstView)

两个视图中都有很多元素,为了构建这些元素,我主要使用 Visual Format 约束和锚点。

IE

let topFirstViewConstraint = firstView.topAnchor.constraint(equalTo: self.topAnchor, constant: 4)
        allConstraints.append(topFirstViewConstraint)
...
let goButtonCenter = goButton.centerXAnchor.constraint(equalTo: firstView.centerXAnchor, constant: 0)
        allConstraints.append(goButtonCenter)

为了在正面和背面视图之间切换,我使用 UIView.transition:

UIView.transition(from: firstView, to: infoView, duration: 0.2, options: .transitionFlipFromLeft) { (success) in

        }

它就像一个魅力,我根本没有任何自动布局错误。

但是,如果我试图从约束切换firstViewinfoView firstView狂野,反之亦然(我仍然没有任何错误,但我知道这些视图应该看起来如何,而且一团糟)。我尝试self.updateConstraints()在过渡关闭中使用,但它不起作用。

有没有人经历过这样的事情?

标签: swiftuicollectionviewuicollectionviewcellnslayoutanchor

解决方案


https://developer.apple.com/documentation/uikit/uiview/1622562-transition说:

fromView:过渡的起始视图。默认情况下,此视图作为过渡的一部分从其父视图中删除。

当约束的一方从超级视图中删除时,约束会发生什么?它肯定不再起作用了。

你可以尝试什么

讨论:此方法提供了一种简单的方法,可以从 fromView 参数中的视图过渡到 toView 参数中的视图。默认情况下,fromView 中的视图在视图层次结构中被 toView 中的视图替换。如果两个视图都已经是视图层次结构的一部分,则可以在 options 参数中包含 showHideTransitionViews 选项以简单地隐藏或显示它们。


推荐阅读