UISplitViewController 没有正确显示

Posted

技术标签:

【中文标题】UISplitViewController 没有正确显示【英文标题】:UISplitViewController is not being displayed correctly 【发布时间】:2013-09-05 08:22:59 【问题描述】:

我通过在viewDidLoad 方法中编写以下代码,在现有的ViewController 中创建并加载了UISplitViewController

LeftPanelViewController *leftPanel = [[LeftPanelViewController alloc] initWithNibName:@"LeftPanelViewController" bundle:nil];
FirstViewController *firstView = [[FirstViewController alloc] initWithNibName:@"FirstViewController_iPad" bundle:nil];

self.navigationController = [[UINavigationController alloc] initWithRootViewController:firstView];

UISplitViewController *splitController = [[UISplitViewController alloc] init];
splitController.viewControllers = [NSArray arrayWithObjects:leftPanel, self.navigationController, nil];

[self.view addSubview:splitController.view];
[self addChildViewController:splitController];

[splitController didMoveToParentViewController:self];

一切都很好,除了 splitController 没有被绘制在 iPad 的边框中,屏幕顶部和视图顶部之间有一个空间。即使当我旋转 iPad 时,左侧面板也有同样的问题。

SplitViewController 没有 xib 文件,当我将添加的视图更改为另一个有时,一切都正确显示。

有什么可能导致这个问题的想法吗?

注意事项: 在模拟器中多次编译和运行该项目会导致 SplitViewController 有时会毫无问题地显示,而在其他情况下会在屏幕的任何边缘和视图之间留有空间。在 iPad 上运行总是会出现同样的问题。

【问题讨论】:

【参考方案1】:

首先.. 为什么要实现容器视图控制器?我猜你只是想自己呈现 splitViewController ,对吧?不要自己添加视图。

而是正确地将其设置为您窗口上的rootViewController(最好在applicationDidFinishLaunching 中)。

self.window.rootViewController = splitViewController;

在标准情况下不需要容器视图控制器。所以你永远不需要使用以下方法:

addChildViewController:
removeFromParentViewController
willMoveToParentViewController:
didMoveToParentViewController:

检查documentation of UIViewController。


如果你真的想实现一个容器视图控制器,那么你需要自己处理布局。所以你需要自己定位/调整另一个控制器的视图。根据您使用的是 AutoLayout 还是 autoresizing,您需要设置正确的约束/标志。

【讨论】:

谢谢!我实现了一个容器视图控制器,因为当应用程序在 iPhone 中运行时,会使用滑出式导航。在这种情况下,我需要容器,但当我要为 iPad 编写代码时,我直接使用了已有的容器。傻我

以上是关于UISplitViewController 没有正确显示的主要内容,如果未能解决你的问题,请参考以下文章

UISplitViewController 没有正确旋转

自定义 UISplitViewController?

UISplitViewController - iPad分屏视图控制器

通用应用程序中的 UISplitViewController 子类

UISplitViewController:为啥我不应该在导航或标签栏界面中显示它?

iPad uisplitviewcontroller 左视图变黑