我有一個UICollectionView
它有相當多的UICollectionViewCells
就可以了。點擊時,我想將單元格滾動到UICollectionView
的中心。我擔心的是,即使我點擊最後一個或頂部的單元格,它也應該移動到集合視圖的中心。如何將UICollectionView中心點擊?
我已經嘗試設置contentInsets
和補償,但他們似乎並沒有工作。我想我必須在選擇時更改內容大小,並在滾動開始時將其更改回原來的大小。
我有一個UICollectionView
它有相當多的UICollectionViewCells
就可以了。點擊時,我想將單元格滾動到UICollectionView
的中心。我擔心的是,即使我點擊最後一個或頂部的單元格,它也應該移動到集合視圖的中心。如何將UICollectionView中心點擊?
我已經嘗試設置contentInsets
和補償,但他們似乎並沒有工作。我想我必須在選擇時更改內容大小,並在滾動開始時將其更改回原來的大小。
設置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];
}
它工作正常,我。
感謝作品完美。 –
錯字:'UIEdgeInstetsMake'應該是'UIEdgeInsetsMake'。 –
我得到「沒有可見的UICollectionView接口聲明選擇器setContentInsets」 – shim
看來,這個錯誤是由滾動視圖的contentInset
和UICollectionViewFlowLayout
之間的錯誤交互引起的。在我的測試中,設置layout.sectionInset
而不是collectionView.contentInset
消除了這個問題。
基於上述接受的答案,我將消除解決辦法,並更改:
[collectionView setContentInset:UIEdgeInsetsMake(collectionViewHeight/2, 0, collectionViewHeight/2, 0)];
到
[layout setSectionInset:UIEdgeInsetsMake(collectionViewHeight/2, 0, collectionViewHeight/2, 0)];
解決Mikhail解決方法的驚人解決方案。謝謝! – jomafer
您可以使用scrollToItemAtIndexPath
方法把選擇的(敲擊)小區中心位置在UICollectionView中
[collectionView scrollToItemAtIndexPath:indexPath
atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally
animated:true];
您可以使用UICollectionViewScrollPositionCenteredVertically
垂直居中位置
斯威夫特3解決方案和滾動屏幕居中,使竊聽項目可見:
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
collectionView.scrollToItem(at: indexPath, at: .centeredVertically, animated: true)
}
這並不上面添加或下collectionView
插圖!
檢查我編輯的答案,我添加了一些更改 – Mikhail