Ios 选项卡栏控制器有七个选项卡,五个选项卡指向拆分视图控制器

Ios 选项卡栏控制器有七个选项卡,五个选项卡指向拆分视图控制器,ios,objective-c,uiviewcontroller,uitabbarcontroller,uisplitviewcontroller,Ios,Objective C,Uiviewcontroller,Uitabbarcontroller,Uisplitviewcontroller,我已经做了很多研究,读了很多关于使用选项卡栏控制器和拆分视图控制器的文章,但似乎找不到解决问题的任何提示 在苹果开发者论坛Cocoa Touch的标题下,以下帖子迄今为止给了我最大的领先优势 从iOS 8开始,在选项卡栏控制器中嵌入拆分视图控制器 (或您自己的容器视图控制器)受支持,并应 “只要工作”。将拆分视图控制器推送到导航堆栈上 仍然不受支持 这似乎违背了苹果的文档,包括这篇标题为2014年11月的文章 您可以使用UIKit框架提供的视图控制器 或与其他视图控制器一起创建 更复杂的界面。组

我已经做了很多研究,读了很多关于使用选项卡栏控制器和拆分视图控制器的文章,但似乎找不到解决问题的任何提示

在苹果开发者论坛Cocoa Touch的标题下,以下帖子迄今为止给了我最大的领先优势

从iOS 8开始,在选项卡栏控制器中嵌入拆分视图控制器 (或您自己的容器视图控制器)受支持,并应 “只要工作”。将拆分视图控制器推送到导航堆栈上 仍然不受支持

这似乎违背了苹果的文档,包括这篇标题为2014年11月的文章

您可以使用UIKit框架提供的视图控制器 或与其他视图控制器一起创建 更复杂的界面。组合视图控制器时, 然而,遏制的顺序很重要;只能肯定 安排是有效的。遏制的顺序,从儿童到儿童 家长,详情如下:

  • 内容视图控制器和具有 灵活的边界(例如页面视图控制器)
  • 导航视图控制器
  • 选项卡栏控制器
  • 分割视图控制器
我有一个带有七个选项卡的
UITabBarController
。其中,五个选项卡指向
UISplitViewController
s,两个选项卡指向
UINavigationController
s

下面是一些情节提要的屏幕截图,显示了选项卡栏控制器,它指向五个拆分视图控制器中的三个。。。

当我使用在iPad上运行的
self.traitCollection.horizontalSizeClass=UIUserInterfaceSizeClassRegular
——设备屏幕的水平(宽度)尺寸是规则的(不是紧凑的)->为目标运行时没有问题。所有七个选项卡都显示在底部选项卡栏上,所有视图控制器(包括拆分视图控制器)都能正常工作

我的问题?

当我使用
self.traitCollection.horizontalSizeClass=UIUserInterfaceSizeClassCompact
为目标运行时,Xcode抛出错误并冻结应用程序操作,其中设备屏幕的水平(宽度)尺寸为Compact->在iPhone或iPhone Plus上运行。IB和iOS设备上的结果与预期相同

错误消息:
无法将拆分视图控制器推送到导航控制器

我知道我为什么会收到这个错误。当水平尺寸等级为“紧凑”时,屏幕上的七个标签下降到五个,包括一个(由iOS专门准备的)“更多”标签。其余三个选项卡降级为“更多”选项卡,该选项卡是其自己的导航控制器和表视图控制器。我的故事板正在尝试将拆分视图控制器推送到该导航堆栈上


有没有关于合法解决方案的想法

我建议使用带有“更多”部分的自定义选项卡栏控制器,该部分不会将视图控制器推入导航控制器。最好是UITabBarController的子类,这样您就可以将其与Interface Builder一起使用

我的方法是将当前的“更多”表视图控制器替换为您自己的视图控制器,该视图控制器显示溢出选项卡的列表,但在显示时不会将其相应的视图控制器推入导航栏

一种可能的策略是成为UITabBarController的more navigation控制器(可在选项卡栏控制器的moreNavigationController属性中找到)的代理。然后,如果要显示的视图控制器不是自定义的“更多”视图控制器,则使用代理方法(如navigationController:willShowViewController:animated:)替换导航控制器的ViewController数组的内容


我没有尝试过这个,但它似乎是一个很好的起点,不需要太多关于tabview控制器内部的知识

一些有趣的想法谢谢@ScottAhten。。。我会考虑这些方法,并让你知道它是如何运作的。我面临着一个类似的问题,但它不起作用
navigationController:willShowViewController:animated:
当您选择一个
UISplitViewController
构建自定义选项卡栏控制器的过程如何?我很惊讶这种情况并不常见。@C.Skjerdal这是一个有趣的问题,答案可能太复杂,无法在评论中提供,因此我可能会更新我的问题。。。基本上,自定义选项卡栏是可能的,但很复杂。一些应用程序使用汉堡包图标打开/关闭侧栏菜单,以克服小型类的选项卡栏限制。我更喜欢从长远来看更简单的UI查询替代任务,挑战标签栏中的最低要求,使应用程序易于使用,通过其他控件和视图控制器提供对所需功能/特性的访问。