我刚刚将我的 iPhone 5 iOS 7 升级到了四个 beta 版本。现在,当我在这台 iPhone 上从 Xcode 5 运行我的应用程序时,状态栏并没有隐藏,即使它应该隐藏。
不工作:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
不工作:
[UIApplication sharedApplication].statusBarHidden = YES;
无法登录 Apple 开发者论坛
在您的应用程序 plist 文件中添加一行,将其命名为“查看基于控制器的状态栏外观”并将其设置为 NO
请注意,如果您在应用程序中使用 UIImagePickerController,这根本不起作用。
来自 http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/,mgiroux 的解决方案
https://i.stack.imgur.com/dM32P.png
在视图控制器中添加方法。
- (BOOL)prefersStatusBarHidden {
return YES;
}
prefersStatusBarHidden
返回 true,则它将不起作用。状态栏仍然出现。
在 Plist 中添加以下属性。
-> Status bar is initially hidden
= 是
-> View controller-based status bar appearance
= 否
添加两者 - 现在状态栏将消失。
要在单个视图上隐藏状态栏,您应该使用:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
起初,这对我不起作用,然后在此方法的文档中看到: // 如果您的应用程序使用默认的基于 UIViewController 的状态栏系统,则设置 statusBarHidden 不起作用。
这必须在 plist 文件上完成,将键 View controller-based status bar appearance
添加为 NO
。然后它起作用了。
为了使用旧的 UIApplication 方法来隐藏/显示状态栏,你的应用程序必须为 iOS 7 设置一个 plist 值:
View-Controller Based Status Bar Appearance = NO
此值默认设置为 YES。如果将其更改为 NO,则可以使用旧方法。如果您将其设置为 YES,您仍然可以隐藏状态栏,但由应用程序中的每个视图控制器子类来覆盖:prefersStatusBarHidden
以返回 YES。
每当您的应用程序需要更改状态栏外观或可见性,并且基于视图控制器的状态栏外观设置为 YES 时,您的最外层视图控制器需要调用:
setNeedsStatusBarAppearanceUpdateAnimation
要在 iOS7 中隐藏状态栏,您需要 2 行代码
inapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions write [application setStatusBarHidden:YES];在 info.plist 添加这个基于 View-Controller 的状态栏外观 = NO
[application setStatusBarHidden:YES];
或 application.statusBarHidden = YES;
这个问题有很多组合建议,但问题是 iOS 6 和 7 使用不同的方法隐藏状态栏。我从未成功设置 plist 设置以在 iOS 7 上启用 iOS6 样式的行为,但如果您正在构建应用程序以支持 iOS 6+,则需要同时使用 3 种方法来确保特定视图控制器隐藏状态酒吧:
// for ios 7
- (BOOL)prefersStatusBarHidden{
return YES;
}
// for ios 6
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// explicitly set the bar to show or it will remain hidden for other view controllers
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
无论您的 plist 设置如何,这都应该有效。
我必须在下面进行两项更改才能隐藏状态栏:
将此代码添加到要隐藏状态栏的视图控制器中:
- (BOOL)prefersStatusBarHidden
{
return YES;
}
将此添加到您的 .plist 文件中(转到应用程序设置中的“信息”)
View controller-based status bar appearance --- NO
然后你可以调用这一行来隐藏状态栏:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
只需在 info.plist 文件中添加这两行。它将同时修复 iOS7 和旧版本。
状态栏最初是隐藏的 = YES
查看基于控制器的状态栏外观 = NO
导航到项目并选择 Targets -> General 并查看“状态栏样式...在应用程序启动期间隐藏”复选框将被选中。这将起作用。
试试这个简单的方法:
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
唯一对我有用的是在您的 plist 中添加以下内容
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
我发现在整个应用程序中隐藏状态栏的最简单方法是在 UIViewController
上创建一个 category
并覆盖 prefersStatusBarHidden
。这样您就不必在每个视图控制器中编写此方法。
UIViewController+HideStatusBar.h
#import <UIKit/UIKit.h>
@interface UIViewController (HideStatusBar)
@end
UIViewController+HideStatusBar.m
#import "UIViewController+HideStatusBar.h"
@implementation UIViewController (HideStatusBar)
//Pragma Marks suppress compiler warning in LLVM.
//Technically, you shouldn't override methods by using a category,
//but I feel that in this case it won't hurt so long as you truly
//want every view controller to hide the status bar.
//Other opinions on this are definitely welcome
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (BOOL)prefersStatusBarHidden
{
return YES;
}
#pragma clang diagnostic pop
@end
在 plist 中添加 ---- 基于视图控制器的状态栏外观 --- NO 在每个 viewController 中写入 - (void) viewDidLayoutSubviews { CGRect viewBounds = self.view.bounds; CGFloat topBarOffset = 20.0; viewBounds.origin.y = -topBarOffset; self.view.bounds = viewBounds; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//用于状态栏样式 }
对于 iOS 7 中的状态栏问题,但应用程序的目标应为 5.1 及更高版本
该线程上的许多答案都有效,但我的理解是,如果您尝试做任何动态的事情,您最终需要调用:
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
在 iOS 7 中隐藏状态栏的步骤:
1.转到您的应用程序 info.plist 文件。
2.设置,查看基于控制器的状态栏外观:Boolean NO
希望我解决了状态栏问题.....
对于 iOS 7 在单个视图中使用 viewWillappear 方法:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
要显示状态栏,请使用:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
-(BOOL)prefersStatusBarHidden
{
return YES;
}
在 Info Plist 文件中为以下属性添加一行
属性名称:查看基于控制器的状态栏外观
值:否
尝试将以下方法添加到应用的根视图控制器:
- (BOOL)prefersStatusBarHidden
{
return YES;
}
我尝试了在我的项目中发布的所有这些选项,但它们不起作用。我认为这可能与我已将 Xcode
更新,然后将应用程序更新到 iOS 7 和某些设置在某处搞砸有关。我决定为它构建一个全新的项目,并在简单的设置后:“Status bar is initially hidden = YES
”和“View controller-based status bar appearance = NO
”,正如许多其他人所说的那样,它可以正常工作(即没有状态栏)。
因此,如果您正在处理一个已从旧版本更新到 iOS 7 并尝试了所有其他选项的项目,我的建议是构建一个新项目。
对于 2019 年...
要制作一个没有状态栏的应用程序,
单击 info.plist,右键单击“添加行”。
使用以下设置添加这两个:
https://i.stack.imgur.com/ve10D.png
这里的所有都是它的。
对于 Swift 2.0+ IOS 9
override func prefersStatusBarHidden() -> Bool {
return true
}
隐藏特定视图控制器的状态栏
- (BOOL)prefersStatusBarHidden {
return YES;
}
用于设置状态栏隐藏应用程序:
在.plist 和应用程序中将基于视图控制器的状态栏外观设置为NO:didFinishLaunchingWithOptions:设置:[应用程序setStatusBarHidden:YES];注意:setStatusBarHidden:已弃用
或者
在项目设置 -> 常规选项卡 -> 部署信息检查隐藏状态栏框。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
https://i.stack.imgur.com/3FWFP.png
不定期副业成功案例分享
UIViewControllerBasedStatusBarAppearance
。Status bar is initially hidden
设置为 YES。