我有一个启用了分页的 UICollectionView,并且水平移动的各个视图没有正确居中。我已确保视图与屏幕的宽度相同。
关于如何强制 UICollectionView 水平分页视图的任何指针?
我有一个启用了分页的 UICollectionView,并且水平移动的各个视图没有正确居中。我已确保视图与屏幕的宽度相同。
关于如何强制 UICollectionView 水平分页视图的任何指针?
您必须确保您的部分插图 + 行距 + 单元格宽度都完全等于 CollectionView 的边界。我在自定义 UICollectionViewFlowLayout 子类上使用以下方法:
- (void)adjustSpacingForBounds:(CGRect)newBounds {
NSInteger count = newBounds.size.width / self.itemSize.width - 1;
CGFloat spacing = (newBounds.size.width - (self.itemSize.width * count)) / count;
self.minimumLineSpacing = spacing;
UIEdgeInsets insets = self.sectionInset;
insets.left = spacing/2.0f;
self.sectionInset = insets;
}
您必须记住 UICollectionView 只是 UIScrollView 的子类,因此它不知道您希望分页如何工作。在 UICollectionView 之前,您必须在布置 UIScrollView 的子视图时处理所有这些数学运算。
覆盖方法:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
*targetContentOffset = scrollView.contentOffset; // set acceleration to 0.0
float pageWidth = (float)self.articlesCollectionView.bounds.size.width;
int minSpace = 10;
int cellToSwipe = (scrollView.contentOffset.x)/(pageWidth + minSpace) + 0.5; // cell width + min spacing for lines
if (cellToSwipe < 0) {
cellToSwipe = 0;
} else if (cellToSwipe >= self.articles.count) {
cellToSwipe = self.articles.count - 1;
}
[self.articlesCollectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:cellToSwipe inSection:0] atScrollPosition:UICollectionViewScrollPositionLeft animated:YES];
}