UIView.transition

时间:2018-09-28 16:53:39

标签: swift uicollectionview uicollectionviewcell nslayoutanchor

在我的一个控制器中,我正在使用带有两个单元格的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

        }

它就像一种魅力,我根本没有任何autoLayout错误。

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

您可以尝试的方式

  

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