我有一个UIPageViewController子类,一次显示1个视图控制器。显示的视图控制器具有滚动视图。这允许用户向左/向右滚动以转到新页面,或向上滚动以查看大于屏幕高度的内容。 UIPageViewController子类嵌入在UINavigationController中,navBar的工具栏可见。
可以从我的应用程序的两个不同部分访问此UIPageViewController子类。
在我的第一个viewController中,工具栏是隐藏。点击此视图控制器中的元素加载UIPageViewController,一切看起来都很好。
在我的第二个viewController中,工具栏可见。点击此视图控制器中的元素会加载UIPageViewController,但我的内容(pageViewController的viewController)会从导航栏中向下推。只要我与scrollView进行交互,视图就会自动调整为正确地位于导航栏的正下方。
我在iOS7上运行它,但我不确定它是否有任何关系。
为什么我的视图控制器来自应用程序的两个不同部分时加载方式不同,一个显示工具栏,另一个隐藏它?
答案 0 :(得分:2)
如果您的应用在iOS6上运行良好,但在iOS7上运行不正常,请尝试将 NO 设置为UIPageViewController(UIPVC)的自动调整标量集合属性。
UIPVC似乎里面有一个滚动视图。在iOS7上,UIViewController的automaticAdjustsScrollViewInsets属性默认设置为YES。如果它嵌入在UINavigationController中,我认为它不能很好地工作。
就我而言,我创建了自定义UIPVC并将以下代码放在[viewDidLoad]方法中。
self.automaticallyAdjustsScrollViewInsets = NO;
答案 1 :(得分:1)
我终于能够在NavController中正确对齐嵌入式UIPageViewController,NavController本身位于TabBarcontroller中。我是通过在虚拟“rootviewcontroller”中以编程方式创建pageViewController来实现的,遵循默认Xcode“New Project”中给出的名为“基于页面的应用程序”的示例。
在我的情况下,以下故事板布局产生错误:TabBarController - > NavController - > UIPageViewController(滚动水平) - > ContentViewController
我将故事板布局更改为:TabBarController - > NavController - > CustomRootViewController
CustomRootViewController实例化UIPageViewController并将其保存为成员属性。 CustomRootViewController成为其PageViewController的DataSource和Delegate。请参阅默认的Xcode“New Project”,称为“基于页面的应用程序”,以获取如何设置RootViewController的示例。
不幸的是,这整个问题似乎是当您使用的拖动和放下“UIPageViewController”,用涡旋水平过渡型,嵌入在navController(和/或tabbarcontroller)在故事板由错误引起的。仅供参考 - 在pageViewController的viewWillAppear中,我尝试重置pageViewController的框架和每个大小contentViewControllers为(0,0)的设备相匹配,与pageViewController最初的viewController的又视图总是被移入下降了什么似乎是嵌入它的tabbarcontroller的高度。以下是对那些希望进一步探讨这个问题的人的一些观察:
在viewDidLoad中,您可以设置pageViewController的初始视图的Frame来偏移布局错误。但是,你可能不得不针对不同方向的不同设备处理不同的布局校正,这可能是一个令人头疼的问题。
在Storyboard中,将pageViewController的过渡样式设置为“page curl”可以解决布局问题。因此,我确信布局问题存在于页面滚动中,这是在实例化时设置的。 Storyboard实例化会产生布局错误,但我的CustomRootViewController中以编程方式实例化是没有错误的。