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.transition(from,to)和autoLayout约束
无法使用 UIViewPropertyAnimator.fractionComplete 驱动 UIView.transition
插入视图控制器视图的层次结构时,UIView 不会放在集合视图单元格的顶部