0

我開發了一個自定義的UICollectionViewLayout來處理客戶端應用程序上的一些高級佈局需求,看起來很好。直到我開始嘗試使用動畫。自定義UICollectionViewLayout動畫問題

我花了一段時間的工作記錄,並使其更加靈活,所以它可以在這裏找到:https://github.com/liamnichols/LNCollectionViewPagedLayout

其目的是將內容分頁到新頁面,如果它不適合上一頁,以確保內容不會跨兩頁切割,並且它似乎處理了這個問題。

我從一開始就注意到動畫問題在哪裏,但是我從未需要使用動畫,所以沒有嘗試調查/修復,儘管現在它已經成爲一個要求,即UICollectionViewCell可以展開,揭示更多內容,以及何時我試圖使用任何形式的動畫方法(reloadRowsAtIndexPaths:,performBatchUpdates:completion:等)我總是會遇到非常奇怪的行爲,從崩潰(view argument is nil)到混亂的佈局。

目前我的佈局的工作原理是通過詢問每個單元的大小代表就可以運行一些邏輯來看看它是否適合與否等創造的UICollectionViewLayoutAttributesprepareLayout字典...

當調用layoutAttributesForElementsInRect:方法時,它可以簡單地查詢字典並獲取與該矩形相關的一組屬性。

首先,創建此佈局的最佳方法是?我發現很難找到有關創建自定義佈局來滿足我的需求的文檔,並最終在其他開源庫中查找有關如何執行的指示。

其次,我還沒有實現初始/最終佈局屬性方法,因爲我無法弄清楚如何正確使用它們。這是我有問題的原因還是這些是可選的?

任何幫助或指示正確創建UICollectionViewLayouts將是偉大的。

回答

1

對於擴展單元格的問題(或只是單元格一般會更改大小),此答案may be helpful。簡短的回答是initialLayoutAttributesForAppearingItemAtIndexPath:(以及一般來說,所有初始/最終佈局屬性方法)的默認實現並不總是返回正確的幀,並且您必須重寫此方法並修復錯誤。

調試這些類型的問題相當簡單。通過記錄返回的屬性開始,像這樣的東西

- (UICollectionViewLayoutAttributes *)initialLayoutAttributesForAppearingItemAtIndexPath:(NSIndexPath *)itemIndexPath { 
    UICollectionViewLayoutAttributes *attributes = [super initialLayoutAttributesForAppearingItemAtIndexPath:itemIndexPath]; 
    NSLog(@"indexPath=%@, attributes=%@", itemIndexPath, attributes); 
    return attributes; 
} 

並確定何時幀不正確。從那裏你可以想出一個方法來糾正錯誤。這就像我可以在不知道更多細節的情況下所獲得的那樣詳細。

+0

感謝您的指點,我將介紹一下initialLayoutAttributes方法,看看結果如何! – liamnichols

+0

我接受這個答案,因爲調試技巧幫助我發現,當contentOffset不是CGPointZero時,我正在閱讀collectionView的邊界。這導致錯誤的值,導致我的佈局自身損壞並崩潰。 感謝您的提示 – liamnichols

相關問題