如何在iOS 9中使用Objective-C针对特定的视图控制器隐藏状态栏

3

我希望能够针对特定的视图控制器隐藏状态栏,而不是所有视图控制器都隐藏。 然后我尝试了以下代码:

[[UIApplication sharedApplication] setStatusBarHidden:YES]; in the `.AppDelegate.m` inside the `didfinishlaunchwithoption`  but it didn't work. and also it is deprecated.

然后我在我的视图控制器中尝试

- (BOOL) prefersStatusBarHidden{
    return YES;
}

这个也没有起作用。请问有人能帮忙吗?谢谢。

我不想在这里使用任何已弃用的方法。

1
可能是在iOS 9中隐藏状态栏的重复问题。 - Badal Shah
你解决了你的问题吗? - Diana Prodan
不行啊兄弟,@DianaProdan的方法我都试过了,你有什么想法吗? - caldera.sac
我从 .plist 文件中删除了 'View controller-based status bar appearance 字段,并在需要隐藏状态栏的控制器中添加了 - (BOOL) prefersStatusBarHidden{ return YES; }。它起作用了。 - Diana Prodan
5个回答

1

前往info.plist并添加两个属性(如果不存在)。将“Status bar is initially hidden”设置为“YES”,将“UIViewControllerBasedStatusBarAppearance”设置为“YES”。这将隐藏您的应用程序状态栏。

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

在需要的地方调用此方法,例如从viewDidLoad中调用。

[self prefersStatusBarHidden];

这对于隐藏状态栏很有效,但在特定的视图控制器中无法显示状态栏。不管怎样,谢谢。 - caldera.sac
@Graham,请检查编辑后的答案,这对我来说完美无缺,只需将“UIViewControllerBasedStatusBarAppearance”更改为“YES”,其他保持不变即可。 - MOHAMMAD ISHAQ

1

在您的视图控制器中尝试下面的代码。
尝试以下方法,无需弃用警告:

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

}

- (void)viewWillDisappear:(BOOL)animated{
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
    [super viewWillDisappear:animated];
}

iOS 9 更新
在您的viewController中添加以下代码,以隐藏状态栏。

- (BOOL) prefersStatusBarHidden {
    return YES;
}

setStatusBarHidden(_:withAnimation:) 在 iOS 9 中已被弃用。 - Theo

1

我希望只隐藏特定视图控制器的状态栏,而不是所有视图控制器的状态栏。

只有顶层视图控制器可以决定是否隐藏状态栏。你的prefersStatusBarHidden不会被考虑,因为你的视图控制器不是顶层视图控制器 - 它有某种负责状态栏的父视图控制器。


-1
Try below code in your view controller.

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];

}

- (void)viewWillDisappear:(BOOL)animated{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    [super viewWillDisappear:animated];
}

2
[[UIApplication sharedApplication] setStatusBarHidden:YES] 这个方法已经被弃用。 - caldera.sac

-1
将以下代码添加到您的视图控制器中..
 - (BOOL)prefersStatusBarHidden {

   return NO;
}

如果您更改此方法的返回值,请调用setNeedsStatusBarAppearanceUpdate方法。
对于childViewController,要指定子视图控制器应控制首选状态栏隐藏/显示状态,请实现childViewControllerForStatusBarHidden方法。

1
prefersStatusBarHidden 没有被调用 - Mrug
prefersStatusBarHidden方法中的返回命令之后调用setNeedsStatusBarAppearanceUpdate是不可能的。 - Dmitry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接