2013-07-26 32 views
10

我有一個UICollectionView它有相當多的UICollectionViewCells就可以了。點擊時,我想將單元格滾動到UICollectionView的中心。我擔心的是,即使我點擊最後一個或頂部的單元格,它也應該移動到集合視圖的中心。如何將UICollectionView中心點擊?

我已經嘗試設置contentInsets和補償,但他們似乎並沒有工作。我想我必須在選擇時更改內容大小,並在滾動開始時將其更改回原來的大小。

+0

檢查我編輯的答案,我添加了一些更改 – Mikhail

回答

26

設置contentInsets應該給周圍的第一和最後一個單元的一些額外的空間:

你應該叫後:

[collectionView scrollToItemAtIndexPath:selectedItemPath 
    atScrollPosition:UICollectionViewScrollPositionCenteredVertically 
    animated:YES]; 

它傳遞正確的滾動位置是很重要的:UICollectionViewScrollPositionCenteredVertically

這應該正確地在中心點擊項目。

編輯

這真的很奇怪,但UIEdgeInsets設置爲集合視圖方法scrollToItemAtIndexPath後沒有正常工作,所以我做一些修改:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { 
    CGFloat collectionViewHeight = CGRectGetHeight(self.collectionView.frame); 
    [collectionView setContentInset:UIEdgeInsetsMake(collectionViewHeight/2, 0, collectionViewHeight/2, 0)]; 

    UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; 
    CGPoint offset = CGPointMake(0, cell.center.y - collectionViewHeight/2); 
    [collectionView setContentOffset:offset animated:YES]; 
} 

它工作正常,我。

+0

感謝作品完美。 –

+0

錯字:'UIEdgeInstetsMake'應該是'UIEdgeInsetsMake'。 –

+0

我得到「沒有可見的UICollectionView接口聲明選擇器setContentInsets」 – shim

9

看來,這個錯誤是由滾動視圖的contentInsetUICollectionViewFlowLayout之間的錯誤交互引起的。在我的測試中,設置layout.sectionInset而不是collectionView.contentInset消除了這個問題。

基於上述接受的答案,我將消除解決辦法,並更改:

[collectionView setContentInset:UIEdgeInsetsMake(collectionViewHeight/2, 0, collectionViewHeight/2, 0)]; 

[layout setSectionInset:UIEdgeInsetsMake(collectionViewHeight/2, 0, collectionViewHeight/2, 0)]; 
+0

解決Mikhail解決方法的驚人解決方案。謝謝! – jomafer

2

您可以使用scrollToItemAtIndexPath方法把選擇的(敲擊)小區中心位置在UICollectionView中

[collectionView scrollToItemAtIndexPath:indexPath 
         atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally 
           animated:true]; 

您可以使用UICollectionViewScrollPositionCenteredVertically垂直居中位置

1

斯威夫特3解決方案和滾動屏幕居中,使竊聽項目可見:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    collectionView.scrollToItem(at: indexPath, at: .centeredVertically, animated: true) 
} 

這並不上面添加或下collectionView插圖!

相關問題