RTRootNavigationController icon indicating copy to clipboard operation
RTRootNavigationController copied to clipboard

当使用SplitViewController + 分屏多任务时,闪退

Open hstdt opened this issue 7 years ago • 16 comments

环境 : iPad 12.9 竖屏 + iOS 11.3 + Xcode 9.3 + RTRootNavigationController 0.6.6

产生bug的原因:同时设置masterViewController和detailViewController的NavigationController为RTRootNavigationController image

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

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

jietu20180419-133956-hd

RTRootNavigationControllerSplitViewBug.zip

hstdt avatar Apr 19 '18 05:04 hstdt

还没考虑过 iPad 中的使用场景

rickytan avatar Apr 19 '18 08:04 rickytan

@rickytan 实际上也只是和UISplitViewController冲突了,iPad其他场景还没遇上过问题。

hstdt avatar Apr 19 '18 09:04 hstdt

有空再看看

rickytan avatar Apr 20 '18 08:04 rickytan

  1. Demo 中使用 topViewController 的地方需要改为 rt_topViewController
  2. UISplitViewController 支持 UINavigationController 嵌入 UINavigationController,情况较为复杂,其中还涉及到一些私有方法:
    • _allowNestedNavigationControllers
    • _setIsNestedNavigationController:
    • _prepareForNestedDisplayWithNavigationController:

要完美支持,需要时间……

rickytan avatar Apr 27 '18 05:04 rickytan

试试 https://github.com/rickytan/RTRootNavigationController/tree/issue199 分支,不能解决 返回按钮与收起展开并存的问题

rickytan avatar Apr 27 '18 06:04 rickytan

@rickytan 确实,不过已经不会闪退了,非常感谢。返回按钮和收起展开通过业务去手动定制应该可以。

不过导航栏动画,和title的设置也有些问题。DetailVC上会同时出现2个导航栏,同时在ViewDidLoad中设置的title会无效(第23秒)。

更新:还有第7-12秒的时候,DetailViewController的返回按钮消失。

jietu20180427-161651-hd

RTRootNavigationControllerSplitViewBug.zip

hstdt avatar Apr 27 '18 08:04 hstdt

两个导航栏的问题已经解决,再更新下 issue199 分支

rickytan avatar Apr 27 '18 08:04 rickytan

情况太多,无法完美解决,UINavigationController 私有方法做了很多事

rickytan avatar Apr 27 '18 09:04 rickytan

5:25 两个导航栏的问题依然存在,已进行了工程的Clean和重新下载branch.

确实做到这里就足够了,返回按钮就放到业务代码中去优化就好了。

hstdt avatar Apr 27 '18 09:04 hstdt

最新版本,无论哪种方案(下方),都无法改变标题。之前的版本,虽然无法更改,但是第一时间出现的导航栏的标题,是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];
}
image

hstdt avatar Apr 27 '18 09:04 hstdt

如果DetailViewController的NavigationController不使用RTRootNavigationController,那么这个导航栏就会不显示。

RTRootNavigationControllerBranch199.zip

image

hstdt avatar Apr 27 '18 12:04 hstdt

上面7楼更新了一下,在7-12秒的时候,DetailViewController的返回按钮消失,这个不知道如何能添加回来。

hstdt avatar Apr 27 '18 12:04 hstdt

self.rt_navigationControll.title 试试?这里层级关系有点乱的

rickytan avatar Apr 28 '18 00:04 rickytan

self.rt_navigationController.title也不行,self.rt_navigationController.navigationItem.title可以

hstdt avatar Apr 28 '18 01:04 hstdt

导航栏不显示,是因为 UINavigationController 被嵌入另一个 UINavigationController 时,系统自动调了 setNavigationBarHidden: ,否则有两个条了。你可以手动改回来。同时本项目的 RTRootNavigationController 的条永远是隐藏的,两种混用,就两个都没了

rickytan avatar Apr 28 '18 01:04 rickytan

最简单的:

  1. 都用系统自带的,它处理了各种情况
  2. 禁用收起模式,勾上:image

rickytan avatar Apr 28 '18 01:04 rickytan