Я виявив, що прокрутка viewWillAppear
може не працювати надійно, оскільки представлення колекції ще не закінчило її макет; ви можете прокрутити до неправильного елемента.
Я також виявив, що прокручування viewDidAppear
призведе до того, що миттєво буде видно некрольований вид.
І якщо ви прокручуєте кожен раз viewDidLayoutSubviews
, користувач не зможе вручну прокручувати, оскільки деякі макети колекції викликають макет підперегляду кожного разу, коли ви прокручуєте.
Ось що я знайшов роботи надійно:
Мета 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];
}
}
Швидкий:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if (!self.initialScrollDone) {
self.initialScrollDone = true
self.testNameCollectionView.scrollToItem(at:selectedIndexPath, at: .centeredHorizontally, animated: true)
}
}
initialScrollDone
прапора, як це робив LenK, оскільки цей метод буде викликатись не один раз, і якщо ви будете викликати scrollToItemAtIndexPath: не раз здається, що колекціяVView може бути некерованою (iOS-симулятор iPhone 5 / iOS 8)