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 - iPad分屏视图控制器
通用应用程序中的 UISplitViewController 子类