4

我有一个 UIPageViewController 子类,一次显示 1 个视图控制器。显示的视图控制器有一个滚动视图。这允许用户向左/向右滚动以转到新页面,或向上向下滚动以查看大于屏幕高度的内容。UIPageViewController 子类嵌入在 UINavigationController 中,并且导航栏的工具栏是可见的。

这个 UIPageViewController 子类可以从我的应用程序的两个不同部分访问。

在我的第一个 viewController 中,工具栏是隐藏的。在这个视图控制器中点击一个元素会加载 UIPageViewController,一切看起来都很好。

在我的第二个 viewController 中,工具栏是可见的。在这个视图控制器中点击一个元素会加载 UIPageViewController,但是我的内容(pageViewController 的 viewController)被从导航栏向下推了一点。不过,只要我与 scrollView 交互,视图就会自动调整为正确地位于导航栏的正下方。

我在 iOS7 上运行它,但我不确定这是否有任何关系。

为什么我的视图控制器从应用程序的两个不同部分加载时会有所不同,一个显示工具栏,一个隐藏工具栏?

4

2 回答 2

2

如果您的应用在 iOS6 上运行良好,但在 iOS7 上运行良好,请尝试将NO设置为 UIPageViewController(UIPVC) 的automaticAdjustsScrollViewInsets属性。

UIPVC 内部似乎有一个滚动视图。在 iOS7 上,UIViewController 的 automaticAdjustsScrollViewInsets 属性默认设置为 YES。我认为如果它嵌入在 UINavigationController 中它不会很好地工作。

就我而言,我创建了自定义 UIPVC 并将以下代码放在 [viewDidLoad] 方法中。

self.automaticallyAdjustsScrollViewInsets = NO;
于 2013-11-04T16:42:03.043 回答
1

我终于能够在 NavController 中正确对齐嵌入式 UIPageViewController,它本身位于 TabBarcontroller 内。我通过在一个虚拟的“rootviewcontroller”中以编程方式创建 pageViewController 来做到这一点,遵循名为“基于页面的应用程序”的默认 Xcode“新项目”中给出的示例。

在我的情况下,以下情节提要布局产生错误:TabBarController -> NavController -> UIPageViewController (scroll-horizo​​ntal) -> ContentViewController

我将故事板布局更改为:TabBarController -> NavController -> CustomRootViewController

CustomRootViewController 实例化 UIPageViewController 并将其保存为成员属性。CustomRootViewController 成为其 PageViewController 的 DataSource 和 Delegate。按照名为“Page-based Application”的默认 Xcode“New Project”来获取如何设置 RootViewController 的示例。

不幸的是,当您使用拖放式“UIPageViewController”时,整个问题似乎是由 Storyboard 中的一个错误引起的,它具有滚动水平过渡类型,嵌入在 navController(和/或 tabbarcontroller)中。仅供参考 - 在 pageViewController 的 viewWillAppear 中,我尝试将 pageViewController 和 contentViewControllers 的框架分别重置为 (0,0),大小与设备匹配,但是 pageViewController 的初始 viewController 的视图总是会向下移动,看起来像是嵌入它的 tabbarcontroller 的高度。对于那些希望进一步研究这个问题的人,这里有一些观察:

  1. 在viewDidLoad中,可以设置pageViewController初始视图的Frame来抵消layout-error。但是你可能不得不为不同方向的不同设备处理不同的布局校正,这可能会让人头疼。

  2. 在 Storyboard 中,将 pageViewController 的过渡样式设置为“page curl”可以解决布局问题。因此,我确信布局问题存在于页面滚动中,它是在实例化时设置的。Storyboard 的实例化会产生布局错误,但在我的 CustomRootViewController 中以编程方式实例化是没有错误的。

于 2013-09-13T21:02:31.483 回答