【问题标题】:Autolayout and Collection View Issue自动布局和集合视图问题
【发布时间】:2013-06-05 05:09:53
【问题描述】:

所以基本问题是,当我单击单元格时,它应该转到新视图控制器中的单元格索引 1,但是当您启用自动布局时。 collectionview 内容偏移量变化消失并被重置。关闭它,工作正常。自动布局以某种方式导致内容偏移重置,但我不确定为什么或如何解决此问题。

此处提供代码。

https://github.com/HaloZero/AutolayoutCollectionViewIssue

【问题讨论】:

  • 如果您从 viewDidAppear 而不是 viewWillAppear 调用 snapToCellAtIndex:withAnimation:method,它可以工作。但是,您确实会在第二个单元格出现之前短暂地看到第一个单元格。
  • 你好@HaloZero你在哪里......我已经解决了你的问题请在你身边测试。

标签: ios objective-c uicollectionview autolayout


【解决方案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];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多