美文网首页ios新版本特性与适配
FDFullscreenPopGesture和iOS14 相册授

FDFullscreenPopGesture和iOS14 相册授

作者: Funnyer | 来源:发表于2020-09-24 17:53 被阅读0次

    最近在处理iOS14 的适配,项目使用了FDFullscreenPopGesture 处理全屏返回事件,库内部的方法交换后的fd_viewWillDisappear 中,因为处理setNavigationBarHidden 是在
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC))
    中进行的,所以当push 时

    if (viewController && self.navigationController) {
                if (viewController.fd_prefersNavigationBarHidden) {
                    [self.navigationController setNavigationBarHidden:YES animated:NO];
                }else {
                    [self.navigationController setNavigationBarHidden:NO animated:NO];
                }
            }
    

    操作的是上一个VC的navigationbar的显示和隐藏,而viewController 是即将显示的vc,这样使两个控制器navigationbar 的显示和隐藏保持一致,在pop 回来或者侧滑返回时,导航的显示更流畅。
    但是在iOS14上,相册授权时,当你授权有限的照片权限时,会present 一个相册,UIImagePickerController内部一个PUPhotoPickerHostViewController,在向下滑动dismiss 掉UIImagePickerController时,因为UIImagePickerController 本身就是一个navigationController,没有navigationController,所以正常,但是当PUPhotoPickerHostViewController 消失的时候,它的navigationController 就是UIImagePickerController,而且!viewController.fd_prefersNavigationBarHidden == true,所以就会出现如下图,显示出导航UI的情况(导航栏显示出来了):


    simulator_screenshot_11377FB3-0F9B-4BF3-A7B8-4583C51A97FB.png

    解决方案:
    1、如果你是自定义导航栏:大可不必实现viewWillDisappear 的交换方法,直接适配(笔者是此类情况)
    2、如果你是用的系统导航栏:可能最快捷的是如果是PUPhotoPickerHostViewController 就return 掉,但是不排除自己实现一个vc,有一个类似PUPhotoPickerHostViewController 的孩子 ,被present 出来,这就有两种情况:1、自己记得给这个孩子设置fd_prefersNavigationBarHidden == true;2、假设从A控制器通过present的方式跳转到了B控制器,那么 A.presentedViewController 就是B控制器;B.presentingViewController 就是A控制器。所以:

    if (self.presentingViewController) {
                return;
            }
    

    把present 出来的子vc 都return 掉。

    相关文章

      网友评论

        本文标题:FDFullscreenPopGesture和iOS14 相册授

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