当使用SplitViewController + 分屏多任务时,闪退
环境 : iPad 12.9 竖屏 + iOS 11.3 + Xcode 9.3 + RTRootNavigationController 0.6.6
产生bug的原因:同时设置masterViewController和detailViewController的NavigationController为RTRootNavigationController

报错:UINavigationControllers are not allowed in a navigation controller!
开断点的话,提示在这里出了问题

录制的操作过程及Demo代码如下:

还没考虑过 iPad 中的使用场景
@rickytan 实际上也只是和UISplitViewController冲突了,iPad其他场景还没遇上过问题。
有空再看看
- Demo 中使用
topViewController的地方需要改为rt_topViewController - UISplitViewController 支持 UINavigationController 嵌入 UINavigationController,情况较为复杂,其中还涉及到一些私有方法:
_allowNestedNavigationControllers_setIsNestedNavigationController:_prepareForNestedDisplayWithNavigationController:
要完美支持,需要时间……
试试 https://github.com/rickytan/RTRootNavigationController/tree/issue199 分支,不能解决 返回按钮与收起展开并存的问题
@rickytan 确实,不过已经不会闪退了,非常感谢。返回按钮和收起展开通过业务去手动定制应该可以。
不过导航栏动画,和title的设置也有些问题。DetailVC上会同时出现2个导航栏,同时在ViewDidLoad中设置的title会无效(第23秒)。
更新:还有第7-12秒的时候,DetailViewController的返回按钮消失。

两个导航栏的问题已经解决,再更新下 issue199 分支
情况太多,无法完美解决,UINavigationController 私有方法做了很多事
5:25 两个导航栏的问题依然存在,已进行了工程的Clean和重新下载branch.
确实做到这里就足够了,返回按钮就放到业务代码中去优化就好了。
最新版本,无论哪种方案(下方),都无法改变标题。之前的版本,虽然无法更改,但是第一时间出现的导航栏的标题,是ViewDidLoad中修改的。
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = RT ? @"RT_Detail" : @"Normal_Detail";
self.title = RT ? @"RT_Detail" : @"Normal_Detail";
// Do any additional setup after loading the view, typically from a nib.
[self configureView];
}
如果DetailViewController的NavigationController不使用RTRootNavigationController,那么这个导航栏就会不显示。
RTRootNavigationControllerBranch199.zip
上面7楼更新了一下,在7-12秒的时候,DetailViewController的返回按钮消失,这个不知道如何能添加回来。
改 self.rt_navigationControll.title 试试?这里层级关系有点乱的
self.rt_navigationController.title也不行,self.rt_navigationController.navigationItem.title可以
导航栏不显示,是因为 UINavigationController 被嵌入另一个 UINavigationController 时,系统自动调了 setNavigationBarHidden: ,否则有两个条了。你可以手动改回来。同时本项目的 RTRootNavigationController 的条永远是隐藏的,两种混用,就两个都没了
最简单的:
- 都用系统自带的,它处理了各种情况
- 禁用收起模式,勾上:
