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

Eon*_*nil 15 iphone coding-style statusbar uiimagepickercontroller

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

任何方法,欢迎,包括黑客或私人方法.这是AppStore的应用程序,但我想尝试.

Mat*_*ski 39

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

设置UIImagePickerDelegate:

libraryUI.delegate = self;
Run Code Online (Sandbox Code Playgroud)

实现以下回调:

- (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];
    }
}
Run Code Online (Sandbox Code Playgroud)

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


dra*_*ard 0

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

@implementation UIApplication (MyCategory)
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle {}
@end
Run Code Online (Sandbox Code Playgroud)

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