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

时间:2010-06-05 21:03:50

标签: iphone coding-style uiimagepickercontroller statusbar

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

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

4 个答案:

答案 0 :(得分:39)

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

设置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

答案 1 :(得分:1)

尝试在ios 8上完美运行

-(void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
    [[[viewController navigationController] navigationBar] setBarStyle:UIBarStyleBlack];
}

答案 2 :(得分:0)

如果要完全禁用更改状态栏样式,可以添加阻止它的UIApplication类别。

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

如果可行,但您想有选择地禁用更改,请尝试继承UIApplication,以便在想要通过更改时调用super。

答案 3 :(得分:0)

我找到了更方便的方法。只是做

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

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