自动布局和集合视图问题
Posted
技术标签:
【中文标题】自动布局和集合视图问题【英文标题】:Autolayout and Collection View Issue 【发布时间】:2013-06-05 05:09:53 【问题描述】:所以基本问题是,当我单击单元格时,它应该转到新视图控制器中的单元格索引 1,但是当您启用自动布局时。 collectionview 内容偏移量变化消失并被重置。关闭它,工作正常。自动布局以某种方式导致内容偏移重置,但我不确定为什么或如何解决此问题。
此处提供代码。
https://github.com/HaloZero/AutolayoutCollectionViewIssue
【问题讨论】:
如果您从 viewDidAppear 而不是 viewWillAppear 调用 snapToCellAtIndex:withAnimation:method,它可以工作。但是,您确实会在第二个单元格出现之前短暂地看到第一个单元格。 你好@HaloZero你在哪里......我已经解决了你的问题请在你身边测试。 【参考方案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];
为我工作。
【讨论】:
那么视图 WillAppear 不会在主线程上发生吗?抱歉,回复延迟了,我在 WWDC 上把这个告诉苹果人,他们提到我应该把它作为一个错误提交。【参考方案2】:不是自动布局重置内容偏移,而是当你尝试捕捉单元格时,子视图没有定位。
使用自动布局,子视图的位置会稍晚一点(其中首先调用 viewWillAppear)。尝试使用 viewDidLayoutSubviews 来捕捉单元格:
来自viewDidLayoutSubviews 的文档:
通知视图控制器它的视图刚刚布置了它的子视图。
所以在计算完所有的约束并放置好你的子视图之后,你就可以调用捕捉方法了。
- (void)viewDidLayoutSubviews
[super viewWillLayoutSubviews];
[self snapToCellAtIndex:1 withAnimation:NO];
【讨论】:
以上是关于自动布局和集合视图问题的主要内容,如果未能解决你的问题,请参考以下文章