QuintGao/GKNavigationBarViewController

和TZImagePickerController冲突,会隐藏TZ的导航栏

banchichen opened this issue · 6 comments

作者你好,GKNavigationBarViewController库在UINavigationController+GKCategory文件中hook了所有UINavigationController的viewDidLoad,对除UIImagePickerController外的所有导航栏控制器隐藏了导航条...

这个会导致同时集成GKNavigationBarViewController和TZImagePickerController的项目里,TZImagePickerController没有导航条...

希望作者可以提供个属性允许设置过滤掉某些导航栏控制器。

你好,最新版本2.0.4已经没有在UINavigationController+GKCategory中对导航栏隐藏了,将其移到了GKNavigationBarViewController中,所以不会对TZImagePickerController有影响。

另外我想对TZImagePickerController提个问题,在TZPhotoPreviewController你对状态栏做了隐藏处理,这样会导致选取图片dismiss后状态栏不见了。

提个建议,应该在TZPhotoPreviewController中加个属性,控制状态栏的隐藏与显示,在viewDidAppear与videDidDisappear中做处理,我这里试了下是可以解决这个问题的。

好吧,昨天我看的别人demo是1.3.5的,没注意你已经发了好几个新版了...👍

是这样的,TZPhotoPreviewController的viewWillDisappear里有再通过:

if (tzImagePickerVc.needShowStatusBar && iOS7Later) {
    [UIApplication sharedApplication].statusBarHidden = NO;
}

把状态栏打开,不过只适用由UIApplication全局控制状态栏的情况。

对于控制器自己决定导航栏的方式,我在TZPhotoPreviewController里是这样实现:

- (BOOL)prefersStatusBarHidden {
    return YES;
}

需要外面调起TZImagePickerController的控制器也实现一下并返回NO(如我的demo)。

你好, 你说的方法我试过了,在我的项目中并没有起作用,原因可能是[UIApplication sharedApplication].statusBarHidden = NO;这个方法在iOS9之后已经弃用了,我试过在外面控制器调用prefersStatusBarHidden这个方法,但是并没有出现状态栏,所以才会提这个建议
1、创建一个属性isHideStatusBar
2、在viewWillAppear中将isHideStatusBar设为YES,在viewWillDisappear中将isHideStatusBar设置为NO,然后调用方法[self setNeedsStatusBarAppearanceUpdate];刷新状态栏
3、实现下面的方法

  • (BOOL)prefersStatusBarHidden {
    return isHideStatusBar;
    }

你这个方案还不错,我择机考虑更新进去👍

但是你说的这个问题不科学,控制器状态栏的方式只有这两种...

如果[UIApplication sharedApplication].statusBarHidden = NO不生效,说明info.plist里设置的View controller-based status bar appearance为YES(或者没有设置)。此时每次切换页面,系统会调即将显示页面的prefersStatusBarHidden来更新状态栏。断点状态如下:
image

我的Demo倒是都生效的,设置View controller-based status bar appearance为NO时[UIApplication sharedApplication].statusBarHidden = NO生效,为YES时prefersStatusBarHidden生效。

可否提供一个能复现你这个情况的Demo?

GKNavigationBarViewController中有与TZImagePickerController嵌套使用的demo,你可以下载下来看看,我在选取图片的delegate里面做了处理,你可以把那两句注释掉看看。
我觉得原因应该是我在UINavigationController+GKCategory中对状态栏的显示与隐藏做了处理导致的。

是挺奇怪的,在你这个demo里,picker消失的时候,没有走demo控制器的prefersStatusBarHidden方法,所以状态栏没能更新...

不过在picker消失的时候,主动调一下setNeedsStatusBarAppearanceUpdate状态栏是能再显示的,只是你的导航栏高度好像没跟着调高...