美文网首页
iOS自带相机顶部导航栏隐藏无效问题

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

作者: dragon清 | 来源:发表于2018-01-18 11:19 被阅读348次

问题背景

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

问题出现

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

给新的VC设上自定义属性

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

导航栏依然存在

问题分析

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

界面层级

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

新建一个UIImagePickerController时会弹出的VC

问题解决

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

根据类名进行判断

问题延伸

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

相关文章

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/zevioxtx.html