Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
banchichen opened this issue Jul 31, 2018 · 6 comments
Closed

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

banchichen opened this issue Jul 31, 2018 · 6 comments

Comments

@banchichen
Copy link

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

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

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

@QuintGao
Copy link
Owner

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

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

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

@banchichen
Copy link
Author

banchichen commented Aug 1, 2018

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

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

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

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

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

- (BOOL)prefersStatusBarHidden {
    return YES;
}

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

@QuintGao
Copy link
Owner

QuintGao commented Aug 1, 2018

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

  • (BOOL)prefersStatusBarHidden {
    return isHideStatusBar;
    }

@banchichen
Copy link
Author

banchichen commented Aug 1, 2018

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

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

如果[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?

@QuintGao
Copy link
Owner

QuintGao commented Aug 1, 2018

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

@banchichen
Copy link
Author

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants