和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
来更新状态栏。断点状态如下:
我的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
状态栏是能再显示的,只是你的导航栏高度好像没跟着调高...