在我的 iOS 视频应用中,状态栏隐藏在某些视图控制器中。我已经使用以下代码完成了这项工作。
[[UIApplication sharedApplication] setStatusBarHidden:YES];
它适用于 iOS 5 和 iOS 6 ,但不适用于 iOS 7。
我特别尝试了这个视图控制器,
例如:
-(BOOL)prefersStatusBarHidden { return YES; }
它运作良好,但我无法在父视图控制器中再次显示状态栏。
您应该将此值添加到 plist:“查看基于控制器的状态栏外观”并将其设置为“否”。
将以下内容添加到您的 Info.plist:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
在 viewdidload 中添加以下行
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];
并添加新方法
- (BOOL)prefersStatusBarHidden {
return YES;
}
还更改 info.plist 文件查看基于控制器的状态栏外观" = NO
它对我有用
在 Plist 中添加以下属性。
Status bar is initially hidden = YES
View controller-based status bar appearance = NO
现在状态栏将隐藏。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated]
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated]
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}
我做了以下,它似乎工作(即使在 iOS 8):
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
}
- (BOOL)prefersStatusBarHidden {
return YES;
}
但是当涉及到 UINavigationController 时,它会变得更有趣:
要在 iOS7 中隐藏状态栏,您需要 2 行代码
在应用程序中:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 写
[[UIApplication sharedApplication] setStatusBarHidden:YES];
在 info.plist 添加这个
View-Controller Based Status Bar Appearance = NO
为了更好地理解,添加一些带有评论的照片:
任何更改之前的应用程序
在您Project Navigator
命名的文件夹中找到Supporting Files
并单击 *.plist 文件
之后,您将获得应用程序的不同设置。您需要添加 2 个键UIStatusBarHidden
和UIViewControllerBasedStatusBarAppearance
. 您只需单击 + 按钮即可执行此操作
按 + 后,您可以选择其中一个键 - 开始输入。
正确版本:
最后应用此更改后的应用程序:
此外,您可以在此处找到替代解决方案
在 iOS10 中,我需要做的就是覆盖我(Swift)prefersStatusBarHidden
中的 var :RootViewController
override var prefersStatusBarHidden: Bool {
return true
}
试试看;
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
在 iOS7 中隐藏状态栏:
打开您的 plist 文件,然后添加一个名为“查看基于控制器的状态栏外观”的行并将其值设置为NO
.
这是 Swift 版本(iOS9 之前):
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}
这也适用(iOS7+):
override func prefersStatusBarHidden() -> Bool {
return true
}
您还需要致电:
setNeedsStatusBarAppearanceUpdate()
在说viewDidLoad()
。
请注意,如果您使用 SplitView 控制器或其他一些container
视图控制器,您还需要让它在发送时返回您的类childViewControllerForStatusBarHidden
。一种方法是为 say 设置一个公共的弱变量statusController
,并在这个被覆盖的方法中返回它。
iOS 9 及以上版本:
由于statusBarHidden
方法已从iOS9弃用, 您需要在 plist 中添加两个值,如下所示:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
或通过用户界面请参考下图:
从statusBarHidden
iOS9弃用:_ _
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_ DEPRECATED _IOS(2_0, 9_0 , "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;
SWIFT 3+(iOS 9、10)的固定解决方案
1- 在 info.plist 设置下面的属性
2-将下面的代码粘贴到根控制器,到
private var isStatusBarHidden = true {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
override var prefersStatusBarHidden: Bool {
return isStatusBarHidden
}
你可以打电话isStatusBarHidden = true
和isStatusBarHidden = false
你想要的hide/show
状态栏
您应该将此值添加到 plist:“查看基于控制器的状态栏外观”并将其设置为“否”。
iOS 隐藏状态栏步骤
1. 打开AppDelegate.m文件,在 didFinishLaunchingWithOptions 方法中添加 application.statusBarHidden
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
application.statusBarHidden = YES;
return YES;
}
View controller-based status bar appearance
放NO
从UIKit
> UIApplication.h
:
// 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
要回答 Susitha 的问题:使用setNeedsStatusBarAppearanceUpdate。这将调用 prefersStatusBarHidden 以刷新您所需的状态栏状态。尝试这个:
@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];
}
如果您想再次查看状态栏,请将您的属性 hideStatusBar(或您所称的任何名称)设置为 NO。通过再次调用来间接调用 preferStatusBarHidden
[self setNeedsStatusBarAppearanceUpdate]
Swift 3 的更新:
使用以下信息更新 Info.plist:
View controller-based status bar appearance: NO
然后,在 ViewController 或其他地方:
UIApplication.shared.isStatusBarHidden = true