Descobri que a rolagem viewWillAppear
pode não funcionar de maneira confiável porque a visualização da coleção ainda não terminou seu layout; você pode rolar para o item errado.
Também descobri que rolar para dentro viewDidAppear
fará com que um flash momentâneo da exibição não rolada fique visível.
E, se você rolar toda vez viewDidLayoutSubviews
, o usuário não conseguirá rolar manualmente porque alguns layouts de coleção causam um layout de subvisualização toda vez que você rola.
Aqui está o que eu descobri que funciona de maneira confiável:
Objetivo 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];
}
}
Rápido :
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if (!self.initialScrollDone) {
self.initialScrollDone = true
self.testNameCollectionView.scrollToItem(at:selectedIndexPath, at: .centeredHorizontally, animated: true)
}
}
initialScrollDone
sinalizador como LenK fez, uma vez que este método será chamado mais de uma vez e se você chamar scrollToItemAtIndexPath: mais de uma vez, parece tornar a collectionView não rolável (simulador iOS iPhone 5 / iOS 8)