我正在创建一个分页的UICollectionView,它可以水平滚动,并且其单元格与集合视图一样大,因此一次仅显示一个单元格。我还想在集合视图首次出现时首先显示最后一个项目,以便其他项目从左侧显示,而不是默认的位置(默认情况下是从右侧显示下一个项目)。
为此,我按照this answer的建议在视图控制器的scrollToItemAtIndexPath:
中调用viewDidLayoutSubviews
。如果我在viewWillAppear或scrollToItemAtIndexPath
中调用viewDidLoad
,则集合视图根本不会滚动到最后一项。
但是,此调用破坏了集合视图单元格的布局。例如,如果我不调用scrollToItemAtIndexPath:
,则集合视图(下面的白色区域)看起来像左图-正确布置但显示了第一项。如果我调用scrollToItemAtIndexPath:
,则收集视图最初确实会显示最后一个项目,但布局会像右边那样混乱(日期不再显示)。
我究竟做错了什么?
更多信息:
viewDidLayoutSubviews的代码:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:self.unit.readings.count - 1 inSection:0];
[self.readingCollectionView scrollToItemAtIndexPath:lastIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];
}
最佳答案
每当遇到此问题且单元格大小恒定时,我都通过手动设置contentOffset并忽略collectionView方法来解决此问题。
self.collectionView.contentOffset = (CGPoint){
.x = self.collectionView.contentSize.width - cell.width,
.y = 0,
};