有没有办法防止 UIImagePickerController 更改状态栏样式?

Posted

技术标签:

【中文标题】有没有办法防止 UIImagePickerController 更改状态栏样式?【英文标题】:Is there a way to prevent UIImagePickerController change statusbar style? 【发布时间】:2011-02-28 06:04:52 【问题描述】:

UIImagePickerController 将状态栏样式更改为黑色/不透明。 我想保持状态栏样式黑色/半透明。 我正在寻找一种方法来防止状态栏样式发生变化。 或者让它顺利过境。现在,呈现 UIImagePickerController 会立即更改状态栏样式,甚至指定 -[presentModalViewController:picker animated:YES]。

欢迎使用任何方法,包括黑客或私有方法。 这是AppStore的应用程序,但我什至想尝试。

【问题讨论】:

【参考方案1】:

我希望状态栏在显示照片库选择器时保持黑色不透明(照片选择器将其更改为黑色半透明),这为我解决了这个问题。

设置 UIImagePickerDelegate:

libraryUI.delegate = self;

实现以下回调:

- (void)navigationController:(UINavigationController *)navigationController 
      willShowViewController:(UIViewController *)viewController 
                    animated:(BOOL)animated 

    if ([navigationController isKindOfClass:[UIImagePickerController class]] && 
        ((UIImagePickerController *)navigationController).sourceType == UIImagePickerControllerSourceTypePhotoLibrary) 
        [[UIApplication sharedApplication] setStatusBarHidden:NO];
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO];
    

您可以在此处指定任何类型的状态栏样式。在您的情况下,您可能必须删除 sourceType 检查并指定 UIStatusBarStyleBlackTranslucent

【讨论】:

这是正确答案,尽管您会看到从黑色半透明到您选择的颜色的轻微“跳跃”。 您在使用 UIImagePickerControllerSourceTypePhotoLibrary 时是否注意到这个问题,打开一些相册,然后向后平移一点,然后取消手势?【参考方案2】:

试试这个在 ios 8 上完美运行

-(void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated

    [[[viewController navigationController] navigationBar] setBarStyle:UIBarStyleBlack];

【讨论】:

【参考方案3】:

如果您想完全禁止更改状态栏样式,您可以添加一个 UIApplication 类别来阻止它。

@implementation UIApplication (MyCategory)
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle 
@end

如果可行,但您想有选择地禁用更改,请尝试将 UIApplication 子类化,以便在您想要传递更改时调用 super。

【讨论】:

哦,它不起作用。我也尝试过继承 UIApplication,但也没有用。也许 UIImagePickerController 正在使用一些私有方法。【参考方案4】:

我找到了更简单的方法。做吧

[[UIApplication sharedApplication] setStatusBarHidden:YES];
[self.delegate setNeedsStatusBarAppearanceUpdate];

并且状态栏被隐藏(如果您希望它可见,请更改代码)。从 UIImagePickerController 中选择图像后必须调用。

【讨论】:

以上是关于有没有办法防止 UIImagePickerController 更改状态栏样式?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法防止键盘被解雇?

有没有办法防止 MASM 更改指令?

有没有办法防止每次执行此代码时出现 ParseError ?

有没有办法防止查询字符串被篡改或查询字符串丢失?

有没有办法使用 iframe 防止双滚动条

有没有办法降低 HTML5 录制的录制音量以防止反馈?