【问题标题】:UIPageViewController not respecting the top layout guide in iOS 7UIPageViewController 不遵守 iOS 7 中的顶级布局指南
【发布时间】:2013-10-22 23:27:21
【问题描述】:

我正在使用页面视图控制器来翻阅一系列视图控制器,每个视图控制器都是从情节提要中实例化的。我基本上使用基于标准页面的应用程序代码作为基础,并在其上构建了我需要的东西。我正在浏览的视图控制器是 UITableViewController 子类或包含自定义滚动视图或其他内容的自定义视图控制器。

页面视图控制器嵌入在导航控制器中,但没有一个视图控制器尊重顶部布局指南,即使在我的自定义视图控制器和我的情况下,情节提要中的布局指南设置了约束认为表格视图控制器会自动管理这个。我的意思是视图的内容从 (0.0, 0.0) 开始,而不是用户可以看到的位置。唯一有效的实际上是将视图控制器视图的框架设置为在状态栏 + 导航栏下方开始,但我希望滚动视图在透明导航栏下方滚动。

我做错了什么或没有做什么?

【问题讨论】:

标签: ios objective-c cocoa-touch ios7 uipageviewcontroller


【解决方案1】:

听起来您不希望内容视图控制器与导航栏和状态栏重叠。如果是这种情况,请尝试将父视图控制器的 edgesForExtendedLayout 属性设置为 UIRectEdgeNone。

// implementation of page view controller's parent view controller
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.pageViewController = ...

    ...

    self.edgesForExtendedLayout = UIRectEdgeNone; // iOS 7 only
}

【讨论】:

  • 我想我确实希望它们能够覆盖导航栏和状态栏。因为它们是滚动视图,所以我希望它们在半透明导航栏下可见。
  • @bilobatum 如何实现self.edgesForExtendedLayout = UIRectEdgeNone;的效果使用故事板?
  • 在 iOS 9 中仍然相关。两年后,我们可能希望将该评论更改为“iOS 7 及更高版本”
  • 在swift 3中,我们必须这样做self.edgesForExtendedLayout = []
【解决方案2】:

对我来说,自动设置AdjustsScrollViewInsets = NO;在 UIPageViewController 上解决了这个问题。您可以在 Interface Builder 中更改它,在 Attribute Inspector 下,取消选中“Adjust Scroll View Insets”。

【讨论】:

    【解决方案3】:

    在故事板上:

    取消选中 parentviewcontollers “Extend Edges”部分中的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-04
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      相关资源
      最近更新 更多