所以基本问题是,当我单击单元格时,它应该转到新视图控制器中的单元格索引 1,但是当您启用自动布局时。collectionview 内容偏移更改消失并重置。关闭它,工作正常。自动布局以某种方式导致内容偏移重置,但我不确定为什么或如何解决这个问题。
此处提供代码。
所以基本问题是,当我单击单元格时,它应该转到新视图控制器中的单元格索引 1,但是当您启用自动布局时。collectionview 内容偏移更改消失并重置。关闭它,工作正常。自动布局以某种方式导致内容偏移重置,但我不确定为什么或如何解决这个问题。
此处提供代码。
使用您的代码:--
- (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];
}
为我工作。
并不是说自动布局正在重置内容偏移量,而是当您尝试捕捉单元格时子视图尚未定位。
使用自动布局,子视图定位稍晚(其中首先调用viewWillAppear)。尝试使用 viewDidLayoutSubviews 来捕捉单元格:
从viewDidLayoutSubviews的文档中:
通知视图控制器它的视图刚刚布置了它的子视图。
因此,在计算完所有约束并放置子视图之后,您可以调用捕捉方法。
- (void)viewDidLayoutSubviews
{
[super viewWillLayoutSubviews];
[self snapToCellAtIndex:1 withAnimation:NO];
}