15

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

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

4

4 回答 4

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.

于 2012-02-07T14:08:42.653 回答
1

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

-(void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
    [[[viewController navigationController] navigationBar] setBarStyle:UIBarStyleBlack];
}
于 2014-11-14T12:29:02.593 回答
0

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

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

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

于 2010-06-05T22:23:17.093 回答
0

我为我找到了更简单的方法。做就是了

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

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

于 2014-03-04T13:41:55.773 回答