我正在創建一個分頁的UICollectionView,它水平滾動,其單元格與集合視圖一樣大,因此一次只顯示一個單元格。我還希望在集合視圖第一次出現時首先顯示最後一個項目,以便其他項目從左側顯示,而不是默認的下一個項目從右側進入。scrollToItemAtIndexPath破壞UICollectionViewCell佈局
爲此,我在視圖控制器的viewDidLayoutSubviews
中調用scrollToItemAtIndexPath:
,如this answer所示。如果我將電話scrollToItemAtIndexPath
放在viewWillAppear或viewDidLoad
中,收集視圖根本不會滾動到最後一項。
但是,這個調用破壞了我的collection視圖單元格的佈局。例如,如果我不打電話給scrollToItemAtIndexPath:
,則收集視圖(下面的白色區域)看起來像左側 - 正確佈局但顯示第一個項目。如果我打電話給scrollToItemAtIndexPath:
,收集視圖最初會顯示最後一個項目,但佈局會像右側一樣混亂(日期甚至不再顯示)。
我在做什麼錯?
更多信息:
- 我看到這個錯誤無論是在iOS的7和iOS 8
- 我使用的大小類在Xcode 6.1。
爲viewDidLayoutSubviews代碼:
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
NSIndexPath *lastIndexPath = [NSIndexPath indexPathForItem:self.unit.readings.count - 1 inSection:0];
[self.readingCollectionView scrollToItemAtIndexPath:lastIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];
}
此方法有效。我只需將這個調用放在'viewWillLayoutSubviews'或'viewDidLayoutSubviews'中,因爲'viewWillAppear'和'viewDidLoad'中的contentSize.width'仍然是零。 –