如果在应用程序委托中设置,则从单个屏幕中删除状态栏颜色
Posted
技术标签:
【中文标题】如果在应用程序委托中设置,则从单个屏幕中删除状态栏颜色【英文标题】:Remove status bar color from a single screen if its set in app delegate 【发布时间】:2017-10-18 03:52:12 【问题描述】:我在 appdelegate 类中设置状态栏颜色如下。
- (void)transitionToViewController:(UIViewController *)viewController
withTransition:(UIViewAnimationOptions)transition
self.window.rootViewController = viewController;
//SET STATUS BAR COLOR
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
view.backgroundColor= [UIColor colorWithRed:0.96 green:0.96 blue:0.96 alpha:1.0];
[self.window.rootViewController.view addSubview:view];
当我尝试从单个屏幕中删除它时,我失败了。它保留了我在 appdelegate 中设置的背景颜色,但删除了文本。我也想删除背景。
这是我尝试删除状态栏的方法:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
状态栏如下所示:
【问题讨论】:
试试***.com/questions/8326804/… Unable to hide statusbar in single UIViewController的可能重复 【参考方案1】:在 info.plist 中添加这个基于 View 控制器的状态栏外观设置 YES
View controller-based status bar appearance = YES
基于视图控制器的隐藏集
在视图控制器中添加方法。
目标-C
- (BOOL)prefersStatusBarHidden
return YES;
斯威夫特
override func prefersStatusBarHidden() -> Bool
return true
【讨论】:
prefersStatusBarHidden 甚至没有被调用。我添加到 plist。 请您在设备上试用一下 还是一样。它没有被调用。 ok..在你的 Appdelegate 中设置 application.setStatusBarHidden(true, with: .none) 然后尝试是否被调用 我没听懂。【参考方案2】:将以下内容添加到您的 Info.plist:
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
这也有效(ios7+):
override func prefersStatusBarHidden() -> Bool
return true
您还需要调用:
setNeedsStatusBarAppearanceUpdate()
在说 viewDidLoad()。
【讨论】:
objective c 版本是什么? -(BOOL)prefersStatusBarHidden 返回 YES; [self setNeedsStatusBarAppearanceUpdate]; 这没有帮助。因为它对整个应用程序隐藏了 uistatusbar。 你只需要在其他视图控制器中设置 No -(BOOL)prefersStatusBarHidden return NO; [self setNeedsStatusBarAppearanceUpdate]; 浏览量超过 50 次,所以我想这不是最好的方法。以上是关于如果在应用程序委托中设置,则从单个屏幕中删除状态栏颜色的主要内容,如果未能解决你的问题,请参考以下文章