在我的iOS视频应用中,某些视图控制器中隐藏了状态栏。我使用以下代码完成了此操作。
[[UIApplication sharedApplication] setStatusBarHidden:YES];
它适用于iOS 5和iOS 6,但不适用于iOS 7。
我尝试了这个特别的视图控制器,
例如:
-(BOOL)prefersStatusBarHidden { return YES; }
它工作正常,但是我无法在父视图控制器中再次显示状态栏。
在我的iOS视频应用中,某些视图控制器中隐藏了状态栏。我使用以下代码完成了此操作。
[[UIApplication sharedApplication] setStatusBarHidden:YES];
它适用于iOS 5和iOS 6,但不适用于iOS 7。
我尝试了这个特别的视图控制器,
例如:
-(BOOL)prefersStatusBarHidden { return YES; }
它工作正常,但是我无法在父视图控制器中再次显示状态栏。
Answers:
您应该将此值添加到plist:“ 基于视图控制器的状态栏外观 ”,并将其设置为“ NO ”。
UIViewControllerBasedStatusBarAppearance
"View controller-based status bar appearance" set it to "YES".
怎么办?
将以下内容添加到您的Info.plist中:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
在viewdidload中添加以下行
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];
并添加新方法
- (BOOL)prefersStatusBarHidden {
return YES;
}
也更改info.plist文件,查看基于控制器的状态栏外观” =否
对我有用
prefersStatusBarHidden
对我来说是什么窍门(以及与其他类似解决方案的结合)
在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)
}
UIStatusBarAnimation
s,它们非常棒。
[super viewWillAppear:animated]
和[super viewWillDisappear:animated]
我做了以下事情,它似乎可以工作(即使在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
试试看
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
这是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
。实现此目的的一种方法是使用一个公共的弱var例如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,“使用-[UIViewController优先于StatususBarHidden]”))__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
状态栏
在iOS
1中隐藏状态栏的步骤 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
迅捷5
使用以下步骤隐藏iOS状态栏:
最终设置屏幕截图:
这适用于Xcode 10.2
来自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。通过再次调用来间接调用preferredStatusBarHidden
[self setNeedsStatusBarAppearanceUpdate]