当前位置: 首页 > 知识库问答 >
问题:

UIImagePickerController中断状态栏外观

梁丘钊
2023-03-14

在我的. plist文件中,我将“基于视图控制器的状态栏外观”设置为NO。但是在UIImagePickerController之后,我的应用程序的行为就好像选项设置为YES

在我的应用程序中,我展示了一个呈现UIImagePickerController的VC。

问题是这样的:

  • 显示photo picker后,在拾取照片库时,状态栏文本的颜色会发生变化

有没有办法不用在我的视图控制器中管理状态栏来解决这个问题?

共有3个答案

卫俊力
2023-03-14

如果在应用程序中将“基于视图控制器的状态栏外观”设置为“否”,则接受的答案将有效。plist文件。如果确实需要控制其他一些视图控制器中的状态栏,并将此选项设置为“是”,则使UIImagePickerController正常工作的另一种方法是将其子类化

// .h
@interface MYImagePickerController : UIImagePickerController
@end

// .m
@implementation MYImagePickerController
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent; // change this to match your style
}
@end
夹谷和韵
2023-03-14

我今天也面临同样的问题。这是我的解决方案

在调用图像拾取器的视图控制器中,将自己设置为图像拾取器的委托。(您可能已经在这样做了)

UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;

由于UIImagePickerController是一种导航控制器,因此您也可以将自己设置为UINavigationController委托。然后:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

用你想要的任何样式替换UIStatusBarStyleLightContent。

丌官翰采
2023-03-14

上面的解决方案都不适合我,但通过结合Rich86man和iOS_DEV_09的回答,我得到了一个一贯有效的解决方案:

UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}

关于这个很棒的解决方案。对于2014/iOS8,我发现在某些情况下,您还需要包括首选StatusBarHidden以及可能的childViewControllerForStatusBarHidden。。。

-(void)navigationController:(UINavigationController *)navigationController
        willShowViewController:(UIViewController *)viewController
        animated:(BOOL)animated
    {
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

-(BOOL)prefersStatusBarHidden   // iOS8 definitely needs this one. checked.
    {
    return YES;
    }

-(UIViewController *)childViewControllerForStatusBarHidden
    {
    return nil;
    }

-(void)showCamera
    {
    self.cameraController = [[UIImagePickerController alloc] init];
    self.cameraController.delegate = (id)self; // dpjanes solution!
    etc...
 类似资料:
  • 完整状态栏如下图: 此列表显示所有 HTTP 请求的相关信息,从左到右各列分别代表: 第一区块,显示的 Fiddler 是否处于捕捉状态,(开启状态)、(关闭状态),可以用快捷键 F12 切换或者点击该区域。 第二区块,显示当前捕捉哪些进程的通讯。前提是被捕获的进程必须使用 HTTP 代理:127.0.0.1:8888 All Processes —— 捕获所有进程的请求 Web Browsers

  • 我需要根据视图控制器改变状态栏样式,所以在我的plist文件“基于视图控制器的状态栏外观”设置为是。 我有时需要隐藏状态栏! 我试图使用setStatusBarHidden,但它似乎只有在“基于视图控制器的状态栏外观”设置为NO时才能工作... 有没有办法隐藏状态栏?

  • 我正在尝试修改状态栏的外观(将文本设置为白色/将样式设置为“灯光”)。通过将其添加到AppDelegate中,我成功地设置了背景色。swift文件: 但是,当我去更改状态栏的文本样式时,甚至在一般情况下更改此样式 我还试图通过nfo.plist修改状态栏,但是没有“基于视图控制器的状态栏外观”字段(见第二张图片)。此外,状态栏样式选项下没有“轻”样式选项(见下图):

  • iOS 7+ 允许创建全屏应用,但是当状态栏覆盖你的应用时,会有这样的问题: 不好! 好! Framework7帮助你解决这个问题。它自动检测你的应用是否是全屏模式,如果是的话,自动添加"with-statusbar-overlay"类到<html>(如果不是的话,移除这个类)。通过"with-statusbar-overlay"类(应用处于全屏模式的时候),<html>在顶部拥有额外的paddi

  • 描述 (Description) iOS 7+允许您构建全屏应用,当您的状态栏与您的应用重叠时,这可能会产生问题。 Framework7通过检测您的应用是否处于全屏模式来解决此问题。 如果你的应用程序处于全屏模式,那么Framework7会自动将with-statusbar-overlay类添加到《html》 (如果app不是全屏模式,则删除),你需要在《body》添加statusbar-over

  • 标题说明了一切。或者我在理解sdk时有一些非常错误的地方,或者苹果的sdk有一些非常错误的地方。 设置(info.plist)基于视图控制器的状态时..=是的,我可以通过调用setNeedsStatusBarEtc来隐藏我的状态栏动画等等。。。但是,我不能改变我喜欢的风格。当我将其设置为“否”时,我可以更改样式,但不能更改所有其他内容。。我该怎么办?怎么了?请帮帮我! 当基于控制器的状态...=Y