iOS14关于UINavigationController在po

2020-12-07  本文已影响0人  双鱼子曰1987

一、问题现象

旧工程项目中,通过swizzling 控制器的 UIViewControllerviewWillAppear:viewWillDisappear: 两个方法,在方法里面做Tabbar的隐藏控制逻辑。

在升级iOS14中,系统为iOS14.1的iPhoneXS手机上面,使用XCode12编译的包,在控制器采用popToViewController:回上上个页面的时候,Tabbar没办法隐藏;而XCode11编译的包正常。

UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:1];
[self.navigationController popToViewController:vc animated:YES];

这个问题属于iOS14适配的问题,猜测应该是iOS14-SDK的针对UINavigationController做了优化,导致行为发生变化。

二、问题分析

举例说明:C_ViewController PopTo A_ViewController

2020-12-04 15:08:22.665901+0800 demo[510:73633] 
 C_ViewController viewWillDisappear:
(
    "<C_ViewController: 0x104a0e5a0>",
    "<Main_ViewController: 0x104a06c30>",
    "<A_ViewController: 0x103706290>"
)
2020-12-04 15:08:22.666289+0800 demo[510:73633] 
 A_ViewController viewWillAppear:
(
    "<C_ViewController: 0x104a0e5a0>",
    "<Main_ViewController: 0x104a06c30>",
    "<A_ViewController: 0x103706290>"
)
2020-12-04 15:08:23.187179+0800 demo[510:73633] 
 C_ViewController viewDidDisappear:
(null)
2020-12-04 15:08:23.187772+0800 demo[510:73633] 
 A_ViewController viewDidAppear:
(
    "<Main_ViewController: 0x104a06c30>",
    "<A_ViewController: 0x103706290>"
)
2020-12-04 15:10:20.826391+0800 demo[514:74952] 
 C_ViewController viewWillDisappear:
(null)
2020-12-04 15:10:20.826904+0800 demo[514:74952] 
 A_ViewController viewWillAppear:
(
    "<Main_ViewController: 0x103b04720>",
    "<A_ViewController: 0x103c0aaf0>"
)
2020-12-04 15:10:21.346241+0800 demo[514:74952] 
 C_ViewController viewDidDisappear:
(null)
2020-12-04 15:10:21.346823+0800 demo[514:74952] 
 A_ViewController viewDidAppear:
(
    "<Main_ViewController: 0x103b04720>",
    "<A_ViewController: 0x103c0aaf0>"
)

iOS14之前,页面消失的时候,self.navigationController被置为nil,并且已经从VC栈中移除;而在iOS14上面,会先移动到栈底部,self.navigationController还没有置为nil,系统后续在释放。

三、问题解决方案探讨

通过对比发现 C_ViewController.navigationController 会在C_ViewController. viewDidDisappear 回调之前被销毁,因此这里面判断Tabbar的隐藏逻辑,可以临时解决该问题。

最终的方案,还是实现UINavigationController 的代理方法,里面去设置Tabbar的问题。

注意:

上一篇 下一篇

猜你喜欢

热点阅读