Я обнаружил, что прокрутка viewWillAppear
может работать ненадежно, потому что представление коллекции еще не завершило свою компоновку; вы можете перейти к неправильному элементу.
Я также обнаружил, что прокрутка viewDidAppear
вызывает кратковременную вспышку непрокрученного представления.
И, если вы прокручиваете каждый раз viewDidLayoutSubviews
, пользователь не сможет прокручивать вручную, потому что некоторые макеты коллекций вызывают макет subview каждый раз, когда вы прокручиваете.
Вот то, что я обнаружил, надежно работает:
Цель C:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
// If we haven't done the initial scroll, do it once.
if (!self.initialScrollDone) {
self.initialScrollDone = YES;
[self.collectionView scrollToItemAtIndexPath:self.myInitialIndexPath
atScrollPosition:UICollectionViewScrollPositionRight animated:NO];
}
}
Swift:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if (!self.initialScrollDone) {
self.initialScrollDone = true
self.testNameCollectionView.scrollToItem(at:selectedIndexPath, at: .centeredHorizontally, animated: true)
}
}
initialScrollDone
флага, как это сделал LenK, поскольку этот метод будет вызываться более одного раза, и если вы вызовете scrollToItemAtIndexPath: более одного раза, кажется, что collectionView не прокручивается (симулятор iOS iPhone 5 / iOS 8)