记录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等第三方库打开了),再隐藏下导航栏,
操作后的效果