and*_*der 5 objective-c uitabbarcontroller uiviewcontroller uisplitviewcontroller ios
我已经做了大量研究,并且阅读了很多关于将Tab Bar控制器与Split View Controllers一起使用的信息,但是似乎找不到任何解决方法的提示...
到目前为止,Apple开发者论坛中针对Cocoa Touch的帖子中的标题“在TabBarController内放置SplitViewController”到目前为止给了我最大的指导。
从iOS 8开始,支持将拆分视图控制器嵌入选项卡栏控制器(或您自己的容器视图控制器)中,并且有望“正常工作”。仍然不支持将拆分视图控制器推入导航堆栈。
这似乎违反了Apple文档,其中包括日期为2014年11月的标题为“ Combined View Controller Interfaces”的文章。
您可以使用UIKit框架本身提供的视图控制器,也可以将其与其他视图控制器结合使用,以创建更复杂的接口。但是,当组合视图控制器时,包含的顺序很重要。只有某些安排有效。从孩子到父母的收容顺序如下:
- 内容视图控制器和具有灵活边界的容器视图控制器(例如页面视图控制器)
- 导航视图控制器
- 标签栏控制器
- 分割视图控制器
我有UITabBarController七个标签。其中,五个选项卡导致UISplitViewControllers,两个选项卡导致UINavigationControllers。
这是一些情节提要的屏幕截图,显示了标签栏控制器通向五个拆分视图控制器中的三个...

当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassRegular- 运行设备屏幕的水平(宽度)尺寸为常规(非紧凑型)->在iPad上运行目标时,没问题。所有七个选项卡都显示在底部选项卡栏上,并且所有视图控制器(包括拆分视图控制器)都可以正常工作。
我的问题?
当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassCompact-在设备屏幕的水平(宽度)尺寸为紧凑->在iPhone或iPhone Plus上运行的目标运行目标时,Xcode会出错并冻结应用程序操作。正如预期的那样,IB和iOS设备都具有相同的结果。
错误信息: Split View Controllers cannot be pushed to a Navigation Controller <UIMoreNavigationController: 0x7ffda38b0200>
我知道为什么我收到了错误消息。在水平尺寸类别为“紧凑”的情况下,七个选项卡在屏幕上下降到五个,其中一个(由iOS专门准备)为“更多”选项卡。其余三个选项卡都降级为“更多”选项卡,它是其自己的导航控制器和表视图控制器。我的情节提要正在尝试将拆分视图控制器推入此导航堆栈。
对合法解决方案有什么想法?
我建议使用带有“更多”部分的自定义选项卡栏控制器,该部分不会将视图控制器推送到导航控制器中。最好是 UITabBarController 的子类,这样您就可以将它与 Interface Builder 一起使用。
我的方法是用您自己的视图控制器替换当前的“更多”表视图控制器,该视图控制器显示溢出选项卡列表,但在显示时不会将其相应的视图控制器推入导航栏。
一种可能的策略是成为 UITabBarController 的 more 导航控制器(可在选项卡栏控制器的 moreNavigationController 属性中找到)的委托。然后,如果要显示的视图控制器不是自定义的“更多”视图控制器,则使用委托方法(例如 navigationController:willShowViewController:animated:)来替换导航控制器的 viewControllers 数组的内容。
我还没有尝试过这个,但这似乎是一个很好的起点,并且不需要太多关于 tabview 控制器内部的知识。
| 归档时间: |
|
| 查看次数: |
481 次 |
| 最近记录: |