iOS自带相机顶部导航栏隐藏无效问题

问题背景

构建了一个APP,因为导航栏样式全部统一,就为UIViewController写了一个分类,在所有的控制器中都引用这个分类,在分类中,动态的定义了一个变量,用Method Swizzling替换viewWillAppear方法指向我们的方法,在这里给VC们都统一按规则设置了状态栏和导航栏的样式。

问题出现

于是有一天,产品经理提了一个需求,需要拍照上传一个东西,很顺手就来了一个UIImagePickerController

给新的VC设上自定义属性

设好了autoNavigationBarHidden,字面意思,写的功能也就是自动隐藏导航栏,但是实际效果仍然是导航栏出现,看不见背后的闪光灯开关。

导航栏依然存在

问题分析

这会是什么原因呢,难道是之前设置的无效了还是顶上覆盖的这层不是导航栏呢。不管怎样,先看看界面层级具体是个什么情况

界面层级

看了一眼层级,哦,原来不仅仅是UIImagePickerController,这个上面还覆盖着CAMViewfinderViewController,CAMPreviewViewController好几个VC,他们具体是什么呢?在钩子函数中打印一下看看吧

新建一个UIImagePickerController时会弹出的VC

问题解决

知道了这些VC的类名,只需要在钩子函数里根据类名判断一下,以后取照片就再也不会看到有导航栏的出现了。

根据类名进行判断

问题延伸

问题比较简单,还好是使用了runtime的特性,为所有子VC都执行了方法,也很准确的发现了剩余的这些VC,如果仅仅是去设置UIImagePickerController的navigationBarHidden属性的话,可真是一时半会发现不了这个问题了,这里也是mark一下,这次的解决也是一种思路。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容