Respuesta nueva y editada:
Agregar esto en viewDidLayoutSubviews
RÁPIDO
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let indexPath = IndexPath(item: 12, section: 0)
self.collectionView.scrollToItem(at: indexPath, at: [.centeredVertically, .centeredHorizontally], animated: true)
}
Normalmente, .centerVertically
es el caso
ObjC
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:12 inSection:0];
[self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically | UICollectionViewScrollPositionCenteredHorizontally animated:NO];
}
La respuesta anterior funciona para iOS anterior
Agregue esto en viewWillAppear
:
[self.view layoutIfNeeded];
[self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
initialScrollDone
bandera como lo ha hecho LenK, ya que este método se llamará más de una vez y si llama a scrollToItemAtIndexPath: más de una vez parece hacer que collectionView no se pueda desplazar (simulador de iOS iPhone 5 / iOS 8)