簡體   English   中英

用動畫更改CollectionView的位置,但在第一次滾動時向后移動

[英]Change CollectionView position with animation but move back when first scroll

我想在按下按鈕時更改我的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()
    }
}

在問完其他人之后,請提供我對這個問題的解決方案,希望以后能對某人有所幫助。

發生此問題的原因是,我更改的框架與我先前在情節提要中設置的自動布局沖突。 根據文檔,我必須將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
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM