objective-c - 为什么 Split View Controller 必须始终是您创建的任何界面的根?

标签 objective-c ios ipad uisplitviewcontroller

在 Apple 的开发人员指南中,他们声明:“ Split View Controller 必须始终是您创建的任何界面的根”(see here)。我很好奇是否有人知道他们为什么这样决定。我有一个基于选项卡导航器的应用程序,其中一个选项卡中的内容以 Split View显示很有意义。为什么苹果会反对这种设计?预先感谢您的回答。

-最大

PS 我不是在寻找将 Split View Controller 放入选项卡导航器 Controller 的方法(我能弄清楚的是,即使代码看起来很草率)。我很好奇是否有人知道为什么 Apple 不同意它。

最佳答案

我认为这不一定是用户体验决定,而是技术限制。 UIKit 对 UIViewControllers 的使用方式做了一些假设。包括只有一个 UIViewController 实例的 View 在任何给定时间在给定窗口中可见的想法。现在,由于 Apple 可以访问实现,他们已经能够为自己的“容器 View Controller ”类(UINavigationController、UITabBarController 和 UISplitViewController)设置异常(exception)。我们无法确切地说出这些 Controller 有多少特殊情况,或者它们需要做什么来支持正确显示嵌套的 subview Controller ,但一个结果似乎是 UITabBarController 和 UISplitViewController 除了作为根之外不打算使用窗口的 View Controller 。尝试将它们嵌套在其他容器 View Controller 中可能会导致意外或不可靠的行为。

我试图在此处介绍这些使用 View Controller 的限制和一些可能的替代方法:http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/希望这对您有用,但恐怕这是获取 UI 的唯一可靠方法,您似乎正在寻找它以在单个 UIViewController 的 View 中实现您自己的 Split View样式显示。

关于objective-c - 为什么 Split View Controller 必须始终是您创建的任何界面的根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5849688/

相关文章:

ios - 跨多个 UITableViewCells 拆分单个核心数据对象

ios - 如何停止在并发线程中运行的预加载进程?

iphone - 如何根据 BOOL 值从其他类隐藏已实现的委托(delegate)方法? - objective-c

ios - WCSession 只工作一次

ios - Facebook 聊天 API 和表情符号

javascript - 纯 javascript 在 iPad 上拖动不流畅

ios - ios 上嵌套 ScrollView 的可用性问题

ios - Swift 中带有核心动画的动画 UILabel 元素

ios - iPhone 应用程序中的 Skydrive 登录崩溃

ipad - 在 iPad 上第一次调用 glDrawArrays 非常慢