2013-06-05 1 views
1

Итак, основная проблема заключается в том, что когда я нажимаю на ячейку, она должна перейти к индексу ячейки 1 в новом контроллере представления, но когда вы включите автозапуск. Изменение смещения содержимого коллекции исчезает и сбрасывается. Отключай, отлично работай. Autolayout как-то вызывает сброс содержимого, но я не уверен, почему и как это разрешить.Autolayout and Collection View Issue

Код доступен здесь.

https://github.com/HaloZero/AutolayoutCollectionViewIssue

+0

Если вы вызываете свой snapToCellAtIndex: withAnimation: метод из viewDidAppear вместо viewWillAppear, он работает. Тем не менее, вы видите первую ячейку ненадолго, пока не появится вторая. – rdelmar

+0

привет @HaloZero, где вы ... Я решил вашу проблему, пожалуйста, проверьте на своей стороне. – Warewolf

ответ

1

использование вы код, как: -

- (void) viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [self performSelectorOnMainThread:@selector(doyouwork) withObject:nil waitUntilDone:NO]; 
} 

-(void)doyouwork 
{ 
    [self snapToCellAtIndex:1 withAnimation:NO]; 
} 

- (void) snapToCellAtIndex:(NSInteger)index withAnimation:(BOOL) animated 
{ 
    NSIndexPath *path = [NSIndexPath indexPathForRow:index inSection:0]; 
    [self.collectionView scrollToItemAtIndexPath:path atScrollPosition:UICollectionViewScrollPositionLeft animated:animated]; 
} 

работает на моей стороне.

+0

так что вид WillAppear не происходит на главной теме или что-то в этом роде? Извините за задержанный ответ, я принял это в Apple, ребята в WWDC, и они упомянули, что я должен подать это как ошибку. – HaloZero

0

Это не то, что автоматическая раскладка сброс содержимого смещения, но подвиды не были расположены при попытке привязать клетку.

С автоматической компоновкой подвыборы расположены немного позже (в которых сначала отображается вид viewWillAppear). Попробуйте использовать вместо viewDidLayoutSubviews для привязки ячейки:

Из документации viewDidLayoutSubviews:

Уведомляет контроллер представления, что его вид просто выложил его подвидов.

Так что после того, как все ограничения были рассчитаны и ваши подпрограммы были уложены, вы можете вызвать метод привязки.

- (void)viewDidLayoutSubviews 
{ 
    [super viewWillLayoutSubviews]; 
    [self snapToCellAtIndex:1 withAnimation:NO]; 
}