我已经做了很多研究并阅读了很多关于使用带有拆分视图控制器的Tab Bar控制器的信息,但似乎无法找到任何解决我的问题的提示......
以下文章"Place SplitViewController inside TabBarController"标题下的Cocoa Touch Apple开发者论坛中的帖子给了我最大的领先优势。
从iOS 8开始,在选项卡栏控制器中嵌入分割视图控制器 (或您自己的容器视图控制器)受支持和期望 '只是工作'。将拆分视图控制器推送到导航堆栈 仍然不受支持。
这似乎违反了Apple文档,包括2014年11月发布的标题为"Combined View Controller Interfaces"的文章。
您可以使用UIKit框架提供的视图控制器 自己或与其他视图控制器一起创建 更复杂的界面。组合视图控制器时 但是,遏制的顺序很重要;只是肯定的 安排有效。遏制的顺序,从孩子到 父母,如下:
- 内容视图控制器和具有的容器视图控制器 灵活的边界(例如页面视图控制器)
- 导航视图控制器
- 标签栏控制器
- 拆分视图控制器
我有一个UITabBarController
,有七个标签。其中,五个标签位于UISplitViewController
个,两个标签位于UINavigationController
s。
这是一些故事板的屏幕截图,显示标签栏控制器导致五个分割视图控制器中的三个...
当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassRegular
运行目标时没问题 - 其中设备屏幕的水平(宽度)尺寸是常规(非紧凑) - >在iPad上运行。所有七个选项卡都显示在底部选项卡栏中,所有视图控制器(包括拆分视图控制器)都可以正常工作
我的问题?
当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassCompact
运行目标时,Xcode会发出错误并冻结应用操作 - 其中设备屏幕的水平(宽度)尺寸为紧凑 - >在iPhone或iPhone Plus上运行。正如预期的那样,对于IB和iOS设备都有相同的结果。
错误消息: Split View Controllers cannot be pushed to a Navigation Controller <UIMoreNavigationController: 0x7ffda38b0200>
我知道为什么我收到错误。在水平尺寸等级为“紧凑”的情况下,屏幕上的七个选项卡下降到五个,包括一个(由iOS特别准备)“更多”选项卡。其余三个选项卡将降级为“更多”选项卡,该选项卡是其自己的导航控制器和表视图控制器。我的故事板试图将拆分视图控制器推送到此导航堆栈。
对合法解决方案的任何想法?
答案 0 :(得分:0)
我建议使用带有&#34;更多&#34;的自定义标签栏控制器。不将视图控制器推入导航控制器的部分。最好是一个UITabBarController的子类,因此您可以将它与Interface Builder一起使用。
我的方法是更换当前的&#34;更多&#34;表视图控制器,带有您自己的视图控制器,显示溢出选项卡列表,但在显示时不会将相应的视图控制器推入导航栏。
一种可能的策略是成为UITabBarController的更多导航控制器的代理(可在标签栏控制器的moreNavigationController属性中找到)。然后使用委托方法,例如navigationController:willShowViewController:animated :,来替换导航控制器的viewControllers数组的内容,如果要显示的视图控制器不是你的自定义&#34;更多&#34;查看控制器。
我还没试过这个,但它似乎是一个很好的起点,并且不需要太多关于tabview控制器内部的知识。