在我的 iOS 视频应用中,状态栏隐藏在某些视图控制器中。我已经使用以下代码完成了这项工作。
[[UIApplication sharedApplication] setStatusBarHidden:YES];
它适用于 iOS 5 和 iOS 6 ,但不适用于 iOS 7。
我特别尝试了这个视图控制器,
例如:
-(BOOL)prefersStatusBarHidden { return YES; }
它运作良好,但我无法在父视图控制器中再次显示状态栏。
您应该将此值添加到 plist:“查看基于控制器的状态栏外观”并将其设置为“否”。
https://i.stack.imgur.com/H75kH.png
将以下内容添加到您的 Info.plist:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
https://i.stack.imgur.com/PpFl3.png
在 viewdidload 中添加以下行
[[UIApplication sharedApplication] setStatusBarHidden:YES
withAnimation:UIStatusBarAnimationFade];
并添加新方法
- (BOOL)prefersStatusBarHidden {
return YES;
}
还更改 info.plist 文件查看基于控制器的状态栏外观" = NO
它对我有用
prefersStatusBarHidden
是什么对我有用(无论是这个解决方案还是其他类似的解决方案)
在 Plist 中添加以下属性。
Status bar is initially hidden = YES
View controller-based status bar appearance = NO
现在状态栏将隐藏。
试试这个简单的方法:
目标-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)
}
UIStatusBarAnimation
,它们非常棒。
[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;
}
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。
另一种选择是您可以继承 UINavigationController 而不是使用 bar 样式。
但是,如果您继承 UINavigationController,如果 navigationBarHidden = true,您将无法控制状态栏。在这种情况下,UIKit 在不询问 UINavigationController 的情况下以某种方式直接访问子 UIViewController。我原以为 UINavigationController 有责任问孩子>耸耸肩<。
如果 modalPresentationStyle = .FullScreen,模态显示的 UIViewController 只会在状态栏中有发言权。
如果你有一个自定义展示风格的模态视图控制器并且你真的希望它来控制状态栏,你可以设置 modalPresentationCapturesStatusBarAppearance = true。
要在 iOS7 中隐藏状态栏,您需要 2 行代码
在 application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中写入 [[UIApplication sharedApplication] setStatusBarHidden:YES];在 info.plist 添加这个基于 View-Controller 的状态栏外观 = NO
为了更好地理解,添加一些带有评论的照片:
任何更改之前的应用程序
https://i.stack.imgur.com/NRlWJ.png
在名为 Supporting Files
的 Project Navigator
文件夹中找到并单击 *.plist 文件
https://i.stack.imgur.com/Yg0B2.png
之后,您将获得应用程序的不同设置。您需要添加 2 个键 UIStatusBarHidden
和 UIViewControllerBasedStatusBarAppearance
。您只需单击 + 按钮即可执行此操作
https://i.stack.imgur.com/yC3rh.png
按 + 后,您可以选择其中一个键 - 开始输入。
正确版本:
https://i.stack.imgur.com/hrlze.png
最后应用此更改后的应用程序:
https://i.stack.imgur.com/WQv1g.png
此外,您还可以找到替代解决方案 here
在 iOS10 中,我需要做的就是覆盖 RootViewController
(Swift) 中的 prefersStatusBarHidden
变量:
override var prefersStatusBarHidden: Bool {
return true
}
斯威夫特 5
使用以下步骤隐藏 iOS 状态栏:
在 Info.plist 上打开。添加新的键基于视图控制器的状态栏外观和值设置为 NO。添加新键 状态栏最初是隐藏的,值设置为 YES。重新编译项目。状态栏现在应该隐藏在 iOS 手机上。
最终设置截图:
https://i.stack.imgur.com/u2HIi.png
这适用于 Xcode 10.2
试试看;
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
iOS 9 及以上版本:
由于 statusBarHidden
方法已从 iOS9 中弃用,您需要在 plist 中添加两个值,如下所示:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
或通过用户界面请参考下图:
https://i.stack.imgur.com/sFU1R.png
由于 statusBarHidden
已从 iOS9 中弃用:
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;
在 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
时返回您的类。一种方法是为 statusController
提供一个公共的弱 var,并在这个被覆盖的方法中返回它。
SWIFT 3+(iOS 9、10)的固定解决方案
1- 在 info.plist 设置下面的属性
https://i.stack.imgur.com/f56qR.png
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;
}
打开 info.plist 并设置
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
UIViewControllerBasedStatusBarAppearance
"View controller-based status bar appearance" set it to "YES".
,我需要做什么?