UIPageViewController在iOS 7中未遵守顶部布局指南

11

我正在使用页面视图控制器来翻转一系列视图控制器,每个视图控制器都是从故事板实例化的。我基本上使用了标准的基于页面的应用程序代码作为基础,并在其上构建了所需的内容。我要翻转的视图控制器是UITableViewController的子类或包含自定义滚动视图等的自定义视图控制器。

页面视图控制器嵌入在导航控制器中,但是即使在我的自定义视图控制器中将约束设置为故事板中的布局指南,在这些视图控制器中没有一个视图控制器遵守顶部布局指南。我的意思是,视图内容从(0.0,0.0)开始,而不是用户可以看到的位置。唯一有效的方法是将视图控制器的视图框架设置为刚好在状态栏+导航栏下方开始,但我希望滚动视图可以滚动到透明导航栏下。

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


1
这个问题已经在这里讨论过了:https://dev59.com/12Ik5IYBdhLWcg3wl_Ap - Mike Pollard
3个回答

18

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

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

    self.pageViewController = ...

    ...

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

6
我认为我确实希望它们与导航栏和状态栏重叠。因为它们是滚动视图,所以我希望在半透明导航栏下可见。 - kmikael
@bilobatum 如何在Storyboard中实现 self.edgesForExtendedLayout = UIRectEdgeNone; 的效果? - dev4life
1
仍然适用于iOS 9。两年后,我们可能想将该注释更改为“iOS 7及更高版本”。 - Mallioch
1
在 Swift 3 中,我们需要这样做:self.edgesForExtendedLayout = [] - Ioan Moldovan

8

对我来说,在UIPageViewController上设置 automaticallyAdjustsScrollViewInsets = NO; 可以解决这个问题。您可以在 Interface Builder 中更改此设置,在 Attribute Inspector 下取消 "Adjust Scroll View Insets" 的勾选。


4

关于storyboards:

取消父视图控制器中“Extend Edges”部分的值

Storyboard截图


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接