UIView.transition 后单元格的结构被破坏

Posted

技术标签:

【中文标题】UIView.transition 后单元格的结构被破坏【英文标题】:Structure of the cell is destroyed after UIView.transition 【发布时间】:2018-09-28 16:53:39 【问题描述】:

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

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

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

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

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

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

        

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

但是,如果我尝试从 firstView 切换到 infoView firstView 约束会变得疯狂,反之亦然(我仍然没有任何错误,但我知道这些视图应该是什么样子,这是一团糟)。我尝试在转换关闭中使用self.updateConstraints(),但它不起作用。

有没有人经历过类似的事情?

【问题讨论】:

【参考方案1】:

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

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

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

你可以尝试什么

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

【讨论】:

谢谢,我已经找到了这个解决方案,但它很难看(例如,我无法使用翻转创建动画过渡)。所以,现在我根本没有在这种情况下使用约束。

以上是关于UIView.transition 后单元格的结构被破坏的主要内容,如果未能解决你的问题,请参考以下文章

UIView 的框架被翻转后发生变化

使用UIView.transition(from,to)和autoLayout约束

无法使用 UIViewPropertyAnimator.fractionComplete 驱动 UIView.transition

插入视图控制器视图的层次结构时,UIView 不会放在集合视图单元格的顶部

为什么我的UIView.transition动画代码不会影响显示?

插入视图控制器视图的层次结构时,UIView不会直接放在集合视图单元格的顶部