[英]Change CollectionView position with animation but move back when first scroll
我想在按下按鈕時更改我的collectionView
位置。 我將collectionView
和Button
包裝在一個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.