如何隐藏iOS状态栏
在我的iOSvideo应用程序状态栏隐藏在一些视图控制器。 我用下面的代码做了这个。
[[UIApplication sharedApplication] setStatusBarHidden:YES];
-
它适用于iOS 5和iOS 6,但不适用于iOS 7。
-
我试着用这个特别的视图控制器,
例如:
-(BOOL)prefersStatusBarHidden { return YES; }
它工作正常,但我不能在父视图控制器中再次显示状态栏。
您应该将此值添加到plist:“ 查看基于控制器的状态栏外观 ”并将其设置为“ NO ”。
将以下内容添加到Info.plist中:
<key>UIStatusBarHidden</key> <true/> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
在viewdidload中添加以下行
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
并添加新的方法
- (BOOL)prefersStatusBarHidden { return YES; }
也改变info.plist文件查看基于控制器的状态栏外观“=否
它的作品对我来说
在Plist中添加以下属性。
Status bar is initially hidden = YES View controller-based status bar appearance = NO
现在状态栏会隐藏起来。
试试这个简单的方法:
Objective-C的:
- (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; }
要在iOS7中隐藏状态栏,您需要2行代码
-
在应用程序中:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions write
[[UIApplication sharedApplication] setStatusBarHidden:YES];
-
在info.plist中添加这个
View-Controller Based Status Bar Appearance = NO
为了更好的理解,添加一些照片与评论:
在任何更改之前的应用
在名为Supporting Files
Project Navigator
文件夹中find,然后单击* .plist文件
之后你会得到不同的应用程序显示设置。 你需要添加2个键UIStatusBarHidden
和UIViewControllerBasedStatusBarAppearance
。 您只需点击+button就可以做到这一点
按下+之后,您可以select其中一个键 – 只需开始键入即可。
正确的版本:
最后应用这个改变后的应用程序:
另外,你可以在这里find替代解决scheme
尝试一下;
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
- UIApplication.setStatusBarX从iOS9开始已弃用
- 在你的info.plist中有UIViewControllerBasedStatusBarAppearance = NO
- 所以我们应该在我们所有的视图控制器中使用preferredStatusBarX
但是当涉及到一个UINavigationController的时候它变得更有趣了:
- 如果navigationBarHidden = true,则调用子UIViewController的preferredStatusBarX,因为子级正在状态栏下显示内容。
- 如果navigationBarHidden = false,则会调用UINavigationController的preferredStatusBarX,毕竟它正在状态栏下显示内容。
- UINavigationController的默认preferredStatusBarStyle使用UINav.navigationBar.barStyle中的值。 .Default =黑色状态栏内容,.Black =白色状态栏内容。
- 所以,如果你将barTintColor设置为一些自定义颜色(你可能是),你还需要设置barStyle为.Black来获得白色的状态栏内容。 在设置barTintColor之前,我将barStyle设置为黑色,以防barStyle覆盖barTintColor。
- 另一种方法是你可以inheritanceUINavigationController而不是用bar风格。
- 然而,如果你inheritance了UINavigationController,你不能控制状态栏,如果navigationBarHidden = true。 不知何故,在这种情况下,UIKit不需要询问UINavigationController就可以直接进入子UIViewController。 我会认为这应该是UINavigationController的责任,要求孩子>耸肩<。
- 和模态显示的UIViewController的只有在状态栏中发言,如果modalPresentationStyle = .FullScreen。
- 如果你有一个自定义的演示风格的模式视图控制器,你真的想要它来控制状态栏,你可以设置modalPresentationCapturesStatusBarAppearance = true。
这里是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
时让它返回您的类。 其中一种方法是使用公共弱statusController
,然后在这个覆盖的方法中返回。
在iOS7中隐藏状态栏:
打开您的plist文件,然后添加一个名为“基于视图控制器的状态栏外观”的添加行并将其值设置为NO
。
您应该将此值添加到plist:“查看基于控制器的状态栏外观”并将其设置为“NO”。
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; }
- 打开info.plist并设置
View controller-based status bar appearance
设置NO
iOS 9以上:
由于statusBarHidden
方法从iOS9被弃用 ,你需要在plist中添加两个值,如下所示:
<key>UIStatusBarHidden</key> <true/> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
或通过用户界面请refre下面的图像:
由于statusBarHidden
已从iOS9中 弃用 :
@property(readwrite,nonatomic,getter = isStatusBarHidden)BOOL statusBarHidden NS_ DEPRECATED _IOS( 2_0,9_0 ,“Use – [UIViewController prefersStatusBarHidden]”)__TVOS_PROHIBITED;
在iOS10中,我需要做的是覆盖我的RootViewController
(Swift)中的prefersStatusBarHidden
var:
override var prefersStatusBarHidden: Bool { return true }
从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
SWIFT 3+(iOS 9,10)的固定解决scheme
1-在info.plist下面设置属性
2-将以下代码粘贴到根控制器,到
private var isStatusBarHidden = true { didSet { setNeedsStatusBarAppearanceUpdate() } } override var prefersStatusBarHidden: Bool { return isStatusBarHidden }
你可以调用isStatusBarHidden = true
和isStatusBarHidden = false
你想hide/show
状态栏