【发布时间】:2014-09-09 19:30:07
【问题描述】:
我有一个包含 UICollectionView 的 UIViewController 子类。选择一个单元格会显示一个新的视图控制器。当我返回到第一个视图控制器时,集合视图的 contentOffset 被重置为 CGPointZero。
根据我的研究,这似乎是标准行为。
我可以通过将私有属性添加到我的视图控制器子类来重置 contentOffset,将 contentOffset 保存在 viewWillDissapear 方法中并在 viewWillAppear 方法中在集合视图中重置它。
不过我想知道,是否有另一种方法可以防止滚动视图内容偏移被重置(消除对额外属性的需要)?
我的目标是 iOS7。
第二个视图控制器如下所示:
[self presentViewController:secondVC animated:YES completion:nil];
并像这样被解雇(在第二个视图控制器中):
-(void) dismiss
{
[self dismissViewControllerAnimated:YES completion:nil];
}
编辑:经过进一步调查,似乎重置 contentOffset 不是默认行为。我还没有弄清楚为什么它会在我的应用程序中发生。我的演示与上面的代码一样。
【问题讨论】:
-
你为什么要另一种方法,我觉得这个方法很好用
-
一方面我觉得这种方法很乱。另一方面,当 contentOffset 重置为 0 时,之前可见的单元格将被重用。我正在从 url 下载图像,所以当我返回视图并重置 contentOffset 时,我需要重新下载图像。一旦我有适当的缓存,这可能不是问题,但我仍然希望这不会发生。
-
我在我的应用程序 (iOS 7.1) 中看不到这种行为。当我从模态演示返回时,内容偏移量不会改变。您是使用连接到单元格的 segue 还是在 didSelectItemAtIndexPath 中进行手动演示?如果是后者,你在那个方法中有什么代码。
-
@rdelmar:你是对的。我创建了一个测试应用程序并看到了与您相同的行为。我通过 didSelectItemAtIndexPath 方法进行演示。我尝试更新我的问题。
-
当你带着collection view回到控制器时你是否在重新加载数据?
标签: ios uiscrollview uicollectionview contentoffset