记录TZImagePickerController浏览图片 状态栏 导航栏显示问题

记录TZImagePickerController浏览图片 状态栏显示问题

解决使用 TZImagePickerController 查看浏览图片时,遇到状态栏消失情况、
主要是 项目中用到了 FDFullscreenPopGesture的问题,它hook了所有控制器的viewWillDisappear判断了如果fd_prefersNavigationBarHidden是NO就显示导航栏

会影响所有未设置fd_prefersNavigationBarHidden为YES但需要隐藏导航栏的控制器
目前项目中受影响的就是使用第三方查看图片时出现 状态栏消失问题

导航栏异常时效果

如果大家不想改动库内部代码,可以参考下面的做法用KVO避免这个问题:

在 TZImagePickerController 初始化的地方 加上这段代码

        TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
        imagePickerVc.sortAscendingByModificationDate = NO;
        imagePickerVc.allowPickingVideo = NO;
        imagePickerVc.allowPickingOriginalPhoto = NO;
        [imagePickerVc.navigationBar setBackgroundImage:[UIImage createImageWithColor:LAUIMainColor] forBarMetrics:UIBarMetricsDefault];
        imagePickerVc.modalPresentationStyle = UIModalPresentationFullScreen;
        imagePickerVc.title = @"相册";
        [self presentViewController:imagePickerVc animated:YES completion:nil];
        // 监听TZImagePickerController导航栏的显示与否
        [imagePickerVc addObserver:self forKeyPath:@"navigationBar.hidden" options:NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
    if ([keyPath isEqualToString:@"navigationBar.hidden"] && [object isKindOfClass:[TZImagePickerController class]]) {
        TZImagePickerController *tzImagePicker = (TZImagePickerController *)object;
        // 当前在预览页面,且导航栏显示着(被FD等第三方库打开了),再隐藏下导航栏
        if ([tzImagePicker.topViewController isKindOfClass:[TZPhotoPreviewController class]] && [change[NSKeyValueChangeNewKey] intValue] == 0) {
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [tzImagePicker setNavigationBarHidden:YES];
            });
        }
    }
}

通过监听TZImagePickerController导航栏是否显示,监听当前在预览页面,且导航栏显示着(被FD等第三方库打开了),再隐藏下导航栏,
操作后的效果
正常时效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值