iPad 上的状态栏未按预期呈现
Posted
技术标签:
【中文标题】iPad 上的状态栏未按预期呈现【英文标题】:Status bar not rendering as expected on iPad 【发布时间】:2013-09-25 19:40:14 【问题描述】:我正在努力解决一个 ios7/objective-c 问题,希望有人能够帮助我。
作为一些背景知识,我有一个应用程序在 io6 设备上按预期呈现,但我试图使其符合 ios7。
让事情变得令人困惑的是,我的代码在 iPhone 上按预期运行,但在 iPad 上却没有。
从下面的图片中,您将看到状态栏(运营商、时间、电池)在 iPhone 上按预期呈现,但在 iPad 上却没有:
First the iPhone
Now the iPad:
(注意:由于这是我第一次发帖,我不能直接嵌入图片,对此感到抱歉)。
从编码的角度来看,我已经尝试了所有建议:How to change Status Bar text color in iOS 7,但没有任何运气。
使应用程序按预期呈现的是我的 AppDeligate 中的以下定义。
// News page
newsViewController = [[NewsViewController alloc] init];
newsNavigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController];
newsNavigationController.navigationBar.translucent = NO;
newsNavigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
newsNavigationController.navigationBar.tag = 4013;
现在我认为问题在于,即使我已将条形样式设置为 UIStatusBarStyleLightContent
,这应该将文本显示为白色,但在 iPad 上却没有这样做。相反,它呈现为黑底黑字。
似乎是这样,因为如果我删除该行:
newsNavigationController.navigationBar.translucent = NO;
黑色变为深灰色,并且可以在黑色中看到载体、日期、电池。我愿意接受深灰色和黑色背景,但状态栏项目需要像 iphone 一样呈现为白色。
有什么建议吗?
附:我不确定这是否有助于将事情指向正确的方向,但 iPad 正在使用 splitview 控制器。
谢谢
【问题讨论】:
只是补充一下,这个问题似乎与 UISplitViewController 有关。如果我删除它,状态文本会按预期呈现为白色。 【参考方案1】:因为状态栏将使用根视图控制器的首选项,调整导航控制器的首选状态栏样式在 iPad 上不起作用,因为它们都不是根视图控制器。因此,您必须在 UISplitViewController
的子类中覆盖 preferredStatusBarStyle
。
@implementation DGBaseSplitViewController
- (void)viewDidLoad
[super viewDidLoad];
- (UIStatusBarStyle)preferredStatusBarStyle
return UIStatusBarStyleLightContent;
@end
【讨论】:
这是 i.m.o 最好的解决方案 这是唯一对我有用的东西。在它工作之前,除了在应用程序委托中重新分配类之外,我还必须确保并将 iPad 故事板中的拆分视图控制器设置为新的子类。【参考方案2】:按照 Wayne 的建议对 SplitViewController 进行子类化,很可能是一个有效的解决方案,但我最终这样做是为了解决我的问题。
设置 UI 状态栏 Hidden = TRUE(我不想打开状态栏 初始屏幕)[存储在 .plist 中为 UIStatusBarHidden=true & UIStatusBarHidden~ipad = true]
在.plist中设置——UIStatusBarStyle = UIStatusBarStyleLightContent
在.plist中设置——UIViewControllerBasedStatusBarAppearance = false
在我的 AppDeligate 中,靠近顶部,我添加了以下行:
[UIApplication sharedApplication] setStatusBarHidden:NO];
它负责在显示初始屏幕后重新显示状态栏。
【讨论】:
【参考方案3】:尝试将 Status bar style~ipad
: UIStatusBarStyleLightContent
放入您的 info.plist。
【讨论】:
感谢您的建议,但不幸的是没有爱。我还尝试了将“状态栏样式”设置为 UIStatusBarStyleLightContent 的通用条目,但这也没有帮助。【参考方案4】:组合:
查看基于控制器的状态栏外观 = 否
状态栏样式 = UIStatusBarStyleLightContent
为我工作
【讨论】:
以上是关于iPad 上的状态栏未按预期呈现的主要内容,如果未能解决你的问题,请参考以下文章