为什么拆分视图控制器必须始终是您创建的任何接口的根?

时间:2011-05-01 16:28:33

标签: objective-c ios ipad uisplitviewcontroller

在Apple的开发人员指南中,他们指出:“拆分视图控制器必须始终是您创建的任何界面的根”(see here)。如果有人知道他们为什么这么做,我很好奇。我有一个基于选项卡导航器的应用程序,其中一个选项卡中的内容在拆分视图中显示是有意义的。为什么Apple会反对这种设计?提前感谢您的回答。

-Max

PS我不是在寻找将分割视图控制器放在标签导航控制器中的方法(即使代码确实看起来很邋),我也能弄清楚。如果有人知道苹果为什么对它皱眉,我会更好奇。

3 个答案:

答案 0 :(得分:2)

我认为这不一定是用户体验决定,因为它是技术限制。 UIKit对如何使用UIViewControllers做了一些假设。包括在任何给定时间只有一个UIViewController实例在给定窗口中可见其视图的想法。现在,由于Apple可以访问实现,因此他们可以为自己的“容器视图控制器”类(UINavigationController,UITabBarController和UISplitViewController)创建例外。我们无法确切地知道这些控制器有多少特殊情况或者他们需要做什么才能正确支持显示嵌套的子视图控制器但是一个结果似乎是UITabBarController和UISplitViewController都不打算用作除root之外的查看窗口的控制器。尝试将它们嵌套在其他容器视图控制器中可能会导致意外或不可靠的行为。

我试图在这里使用视图控制器和一些可能的替代方案来涵盖这些限制:http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/希望这对您有用,但我担心获得UI的唯一可靠方法似乎是寻找它以在单个UIViewController的视图中实现您自己的拆分视图样式显示。

答案 1 :(得分:0)

请忽略我的回答:

因为您无法通过触摸调整UISplitViewController的子视图大小?

答案 2 :(得分:0)

Apple始终高度重视用户界面元素的一致使用。让所有应用程序以相同的方式工作有助于用户立即了解应用程序的工作方式,即使他们以前从未见过它。当您尝试帮助用户预测行为时,建立视图控制器容器的概念层次结构非常有意义。