// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);
所以应该将 View controller-based status bar appearance 设置为NO
@property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early
- (BOOL)prefersStatusBarHidden {
return self.isHideStatusBar;
}
- (void)someMethod {
// triggered by an event or user action
[self setHideStatusBar:YES];
[self setNeedsStatusBarAppearanceUpdate];
}
20 回答
从iOS9开始,不推荐使用
UIApplication.setStatusBarX
不推荐使用info.plist中的UIViewControllerBasedStatusBarAppearance = NO
所以我们应该在所有视图控制器中使用preferredStatusBarX
但是当涉及到UINavigationController时它会变得更有趣:
如果navigationBarHidden = true,则调用子UIViewController的preferredStatusBarX,因为子节点正在状态栏下显示内容 .
如果navigationBarHidden = false,则调用UINavigationController的preferredStatusBarX,毕竟它在状态栏下显示内容 .
UINavigationController的默认preferredStatusBarStyle使用UINav.navigationBar.barStyle中的值 . .Default =黑色状态栏内容,.Black =白色状态栏内容 .
因此,如果您在设置barTintColor之前将barStyle设置为黑色,以防barStyle覆盖barTintColor .
另一种方法是你可以继承UINavigationController,而不是使用bar样式 .
但是,如果你是UINavigationController的子类,如果navigationBarHidden = true,则无法控制状态栏 . 不知怎的,UIKit直接转到子UIViewController而没有在这种情况下询问UINavigationController . 我本以为应该是UINavigationController要求孩子> shrugs < .
如果modalPresentationStyle = .FullScreen,模态显示的UIViewController只会在状态栏中显示 .
如果您有自定义演示样式模式视图控制器并且您确实希望它控制状态栏,则可以设置modalPresentationCapturesStatusBarAppearance = true .
您应该将此值添加到plist:“ View controller-based status bar appearance " and set it to " NO ” .
将以下内容添加到Info.plist中:
在viewdidload中添加以下行
并添加新方法
还要更改info.plist文件查看基于控制器的状态栏外观“=否
它适合我
在Plist中添加以下属性 .
现在状态栏将隐藏 .
试试这个简单的方法:
Objective-C:
斯威夫特:
我做了以下操作,它似乎工作(即使在iOS 8中):
要在iOS7中隐藏状态栏,您需要2行代码
在info.plist中
为了更好地理解,请添加一些评论照片:
应用之前的任何变化
找到名为
Supporting Files
的Project Navigator
文件夹,然后单击* .plist文件在您获得应用程序的不同设置后显示 . 您需要添加2个键
UIStatusBarHidden
和UIViewControllerBasedStatusBarAppearance
. 您只需单击按钮即可完成此操作按下后,您可以选择其中一个键 - 只需开始键入 .
正确版本:
最后应用此更改后的应用程序:
此外,你可以找到替代解决方案here
试试吧;
在iOS10中,我需要做的是覆盖
RootViewController
(Swift)中的prefersStatusBarHidden
var:要在iOS7中隐藏状态栏:
打开plist文件,然后添加一行名为 "View controller-based status bar appearance" 的行并将其值设置为
NO
.这是Swift版本(iOS9之前版本):
这也有效(iOS7):
你还需要打电话:
比方说
viewDidLoad()
.请注意,如果您使用SplitView控制器或其他一些
container
视图控制器,则还需要在发送childViewControllerForStatusBarHidden
时返回您的类 . 一种方法是使用公共弱变量statusController
,并在此重写方法中返回它 .您应该将此值添加到plist:“查看基于控制器的状态栏外观”并将其设置为“NO” .
Steps for hide status bar in iOS
1.打开 AppDelegate.m 文件,在didFinishLaunchingWithOptions中添加application.statusBarHidden方法
View controller-based status bar appearance
设置NO
iOS 9 onwards :
由于
statusBarHidden
方法是 Deprecated 来自 iOS9 ,您需要在plist中添加两个值,如下所示:或者通过用户界面请在图片下方重新显示:
statusBarHidden
是 Deprecated 来自 iOS9 :FIXED SOLUTION FOR SWIFT 3+ (iOS 9, 10)
1-在info.plist下面设置属性
2-将代码粘贴到根控制器,To
您可以在
hide/show
和isStatusBarHidden = false
状态栏中调用isStatusBarHidden = true
和isStatusBarHidden = false
来自
UIKit
>UIApplication.h
:所以应该将
View controller-based status bar appearance
设置为NO要回答Susitha的问题:使用 setNeedsStatusBarAppearanceUpdate . 这将调用prefersStatusBarHidden来刷新所需的状态栏状态 . 试试这个:
如果要再次查看状态栏,请将属性hideStatusBar(或其他任何名称)设置为NO . 通过再次调用来间接调用preferStatusBarHidden
Swift 3更新:
使用以下信息更新Info.plist:
View controller-based status bar appearance: NO
然后,在ViewController或其他地方:
UIApplication.shared.isStatusBarHidden = true