Autolayout和集合视图问题

时间:2013-06-05 05:09:53

标签: ios objective-c uicollectionview autolayout

所以基本的问题是当我单击单元格时,它应该转到新视图控制器中的单元格索引1,但是当你有自动布局时。 collectionview内容偏移更改消失并重置。把它关掉,工作正常。 Autolayout以某种方式导致内容偏移重置,但我不确定为什么或如何解决这个问题。

此处提供代码。

https://github.com/HaloZero/AutolayoutCollectionViewIssue

2 个答案:

答案 0 :(得分: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];
}

为我的一方工作。

答案 1 :(得分:0)

自动布局不是重置内容偏移,但是当您尝试捕捉单元格时,子视图尚未定位。

使用自动布局时,子视图稍后会定位(首先调用 viewWillAppear )。尝试使用viewDidLayoutSubviews代替捕获单元格:

来自viewDidLayoutSubviews的文档:

  

通知视图控制器其视图刚刚布置了其子视图。

因此,在计算完所有约束并放置了子视图后,您可以调用捕捉方法。

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