3

在 iOS 6 中,您可以使用以下方法滚动到 UIScrollView 的顶部:

[scrollView setContentOffset:CGPointZero animated:YES];

如果您在带有半透明导航栏的 iOS 7 中使用该代码,您会得到技术上正确的结果,但对用户不友好。滚动视图的顶部将定位到屏幕的原点。

在此处输入图像描述

我如何将滚动视图的顶部定位到导航栏的底部?我正在寻找一种没有硬编码的解决方案,因为在我的应用程序中,有时状态栏和导航栏可以被隐藏。另外,我想保持半透明效果,而不是逃避和做self.edgesForExtendedLayout = UIRectEdgeNone.

4

3 回答 3

5

不要使用硬编码的值,而是使用新的 API:

[self.scrollView setContentInset:UIEdgeInsetsMake(self.topLayoutGuide.length, 0, self.bottomLayoutGuide.length, 0)];

您正在将滚动视图的内容插图设置为顶部和底部布局指南。因此,如果您有一个 44 点的导航栏和一个 20 点的状态栏并且没有状态栏,那么它将是顶部 64 点(纵向)和底部 0 点。

你应该在viewDidLayoutSubviews.

于 2013-11-15T01:00:50.593 回答
1

您必须使用此方法 -> setContentOffset:animated:

[_scrollView setContentOffset:CGPointZero animated:YES];
于 2015-11-20T05:41:49.217 回答
0

只需使用 -60 作为 y 坐标,或者更好的是,动态获取状态栏和导航栏的高度,因为它们都会发生变化。

我认为请参阅 UIApplication 的 statusBarFrame 和 self.navigationController.navigationBar.bounds。

于 2013-11-15T00:49:16.767 回答