我有一個UICollectionView
設置在一個正常的UIViewController
內,該視圖應該顯示兩種不同類型的數據/單元格,基於按鈕切換的屬性。數據源始終保持不變,只需在每個按鈕上重新填充即可。UICollectionView contentOffset wrong
每當按鈕動作被觸發時,它將清空並重新填充主數據源數組,並在集合視圖上調用-reloadData
。這工作正常,沒有意外的行爲。
現在的問題是,滾動位置,也就是contentOffset
,在更改過濾器後保持不變。所以說集合視圖將顯示A
類型的單元格,我將開始快速滾動,點擊按鈕,並查看單元格更改爲鍵入B
,但仍保持滾動。如果用戶能夠記住它,用戶將不得不重複回到最後的位置。
我試圖通過在我的視圖控制器中有一個scrollPositions
NSMutableDictionary
作爲屬性來解決這個問題。這些鍵表示過濾器類型(A
或B
),並且這些值表示當前內容偏移量的y座標(這是一個垂直滾動的集合視圖)。
我遇到的問題是,儘管這似乎在某種程度上起作用,但contentOffset
屬性似乎隨機關閉了一定數量的像素,有時候它只是十幾個像素,有時候是半個像素屏幕的價值。
這裏是我試過到目前爲止:
- 捕捉
bounds
代替 - 調整
edgesForExtendedLayout
- 設置
automaticallyAdjustsScrollViewInsets
到NO
- 記住當前可見指數路徑,但這似乎是不正確的有時還有
- 在集合視圖上調用
-invalidateLayout
和-layoutIfNeeded
在捕獲偏移量之前和恢復之前的父視圖中 - 直接切換到
UIPageViewController
並且UIViewController
包含針對每個不同過濾器的UICollectionView
,但這會引發其他大量問題。
但不幸的是,無論我嘗試什麼,我總是會得到相同的結果。當返回到先前設置的過濾器時,它會變回到先前捕獲的偏移量,這幾乎是我離開的位置,但並不完全。我很坦白地說,我的智慧到此爲止,任何人都有更多的建議嗎?
還有,如果有問題,這個都是用AutoLayout設置的,並且在過去有過與vanilla UIScrollView
s和AutoLayout的一些不好的體驗。那麼也許有些問題可能會被遺傳?
謝謝你的回答。我應該指定我已經嘗試禁用滾動。在更改過濾器之前還要等待幾秒鐘,希望集合視圖可以在內部解析其邏輯並更新其偏移屬性。我提出的場景是,用戶在滾動時切換標籤的位置不是問題的癥結所在。而是,'contentOffset'屬性的不準確性。 –