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 上的状态栏未按预期呈现的主要内容,如果未能解决你的问题,请参考以下文章

模态视图导航栏未正确显示

iPhone/iOS 状态栏未隐藏在 Xcode 项目中

单击时导航栏未更新为活动状态

Excel 2016 VBA - 状态栏未显示完整消息

iOS8 Xcode 6 Cordova 状态栏未正确隐藏

iPad 多任务处理的首选状态栏样式 - 分屏