【问题标题】:In iOS 7, how to scroll to the top of a UIScrollView when using a translucent UINavigationBar?在 iOS 7 中,如何在使用半透明 UINavigationBar 时滚动到 UIScrollView 的顶部?
【发布时间】:2013-11-28 06:27:23
【问题描述】:

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

[scrollView setContentOffset:CGPointZero animated:YES];

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

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

【问题讨论】:

    标签: ios cocoa-touch uiscrollview ios7


    【解决方案1】:

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

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

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

    您应该在viewDidLayoutSubviews 中执行此操作。

    【讨论】:

    • 这行得通。 TopLayoutGuide 是一个id<UILayoutSupport>,所以要获取CGFloat 值,需要使用topLayoutGuide.length
    【解决方案2】:

    你必须使用这个方法 -> setContentOffset:animated:

    [_scrollView setContentOffset:CGPointZero animated:YES];
    

    【讨论】:

    • 斯威夫特:self.scrollView.setContentOffset(CGPointZero, animated: true)
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-17
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-08
      • 1970-01-01
      • 2014-11-05
      相关资源
      最近更新 更多