用动画更改CollectionView的位置,但在第一次滚动时向后移动

时间:2018-07-02 06:14:37

标签: ios swift animation uicollectionview

我想在按下按钮时更改collectionView的位置。我将collectionViewButton包裹在View中,并使用UIView动画使其向上移动。它可以成功向上移动,但是当我滚动collectionView时,它会返回到其原始位置。如果我尝试了很多次,它就变得正常了,没有再回头。

我该如何解决此问题?谢谢您的任何建议。

func openPreview() {
    if !isPreviewOpened {
        UIView.animate(withDuration: 0.3) {
            self.previewView.frame.origin.y -= self.previewView.frame.height
            self.previewButton.frame.origin.y -= self.previewView.frame.height
        }
        isPreviewOpened = true
        updateUI()
}    

func closePreview() {
    if isPreviewOpened {
        UIView.animate(withDuration: 0.3) {
            self.previewView.frame.origin.y += self.previewView.frame.height
            self.previewButton.frame.origin.y += self.previewView.frame.height
        }
        isPreviewOpened = false
        updateUI()
    }
}

1 个答案:

答案 0 :(得分:0)

问了其他人之后,请提供我对这个问题的解决方案,希望以后能对某人有所帮助。

发生此问题是因为我更改的帧与我先前在情节提要中设置的自动布局冲突。根据文档,我必须将translatesAutoresizingMaskIntoConstraints设置为true才能跟踪帧。

  

默认情况下,视图上的自动调整大小蒙版会引起完全确定约束        视图的位置。这允许自动布局系统跟踪其视图的框架        布局是手动控制的(例如,通过-setFrame:)。        当您通过添加自己的约束选择使用自动布局来放置视图时,        您必须将此属性设置为NO。 IB将为您做到这一点。

这就是答案。

func openPreview() {
    if !isPreviewOpened {
        previewView.translatesAutoresizingMaskIntoConstraints = true
        UIView.animate(withDuration: 0.3) {
            self.previewView.frame.origin.y = self.view.bounds.maxY - self.previewView.frame.height
            self.previewButton.frame.origin.y = self.view.bounds.maxY - self.previewView.frame.height - self.previewButton.frame.height
        }
    }
}