3

我想滾動集合視圖一些屏幕外的細胞沒有動畫和滾動後,得到該小區的位置。問題是收集視圖正確滾動(直觀),但單元格框架保持離屏。這裏是我的代碼:UICollectionView scrollToItemAtIndexPath:買新鮮細胞位置

NSIndexPath *path = [fetchedResultsController indexPathForObject:objectInCollection]; 
[collectionView scrollToItemAtIndexPath:path atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO]; 
[collectionView layoutSubviews]; // or 'layoutIfNeeded', doesn't matter 
UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:path]; 
cellFrame = [cell.superview convertRect:cell.frame toView:nil]; // still not refreshed 

我可以建議收集視圖不適用於滾動,所以我想找到應用滾動的方法。

--- --- UPDATE

收集視圖是在先前的視圖控制器(因此我從代碼滾動它然後彈出可見視圖控制器)。

電池框架,即使在先前的視圖控制器viewDidAppear:方法保持屏幕外。確切地說,[cell.superview convertRect:cell.frame toView:nil];返回幀集合視圖沒有contentOffset。因此CGRectOffset([cell.superview convertRect:cell.frame toView:nil], 0, -collectionView.contentOffset.y)會在屏幕上返回正確的單元格框架。

+0

我不知道我是否正確理解了您的問題,但即使在滾動後,您也應該爲單元格獲取相同的幀。滾動不會改變子視圖的框架;只有contentOffset應該改變。 或者你是否想要在UICollectionView的超視圖座標中獲取框架? –

回答

3

,我可以從您的問題聲明明白了,你要設置的一些細胞,其是從該視圖的可見狀態。

將細胞置於在相同的位置時,計算UICollectionView

  • (無效)prepareLayout
  • (無效)layoutAttributes ..方法。

收集單元的框架是固定的,直到invalidateLayout或reloaddata被調用。只需要使用collectionview的contentOffset即可。 只需獲取單元格的框架並設置contentOffset,以便您的單元格框架在屏幕上可見。希望能幫助到你。

+0

謝謝,Pavan。真的,我們應該添加'contentOffset'到單元格框架來獲得屏幕位置。這種情況不同於普通的方法'[cell.superview convertRect:cell.frame toView:nil]; ' – brigadir

+0

你的歡迎,我認爲你的方法是用於在單元格上有觸摸點,它有一些框架位於屏幕框的外面,這種方法將提供框架,就好像單元具有框架和超級視圖一樣。 –

0

電池框架應該是正確的,我不認爲你需要使用convertRect可言。

cellFrame = cell.frame;

但是,您可能必須在收集視圖加載後執行此操作。首先調用[collectionView reloadData]。

還存在具有該小區的屬性的layoutAttributesForItemAtIndexPath:方法。你可以在indexPath上調用它並通過這種方式獲取屬性。

+0

GregP,感謝關於'layoutAttributesForItemAtIndexPath:'的提示。不幸的是,這個問題沒有解決 - 在調用'scrollToItemAtIndexPath'之前調用'cell.frame',並且在它保持不變之後,即使我們調用'reloadData'。 – brigadir

+0

沒問題。對不起,它沒有幫助。不確定還有其他選擇。 – GregP

0

嘗試改變滾動位置UICollectionViewScrollPositionBottom,這對我的作品 -

[self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionBottom animated:NO]; 
+0

不幸的是,這並沒有幫助... – brigadir

+0

爲什麼它被低估?:( – Atul

+0

這不是我的downvote – brigadir

相關問題