5

我正在努力解决一个 ios7/objective-c 问题,希望有人能够帮助我。

作为一些背景,我有一个在 io6 设备上按预期呈现的应用程序,但我试图使其符合 ios7。

事情变得令人困惑的是,我的代码在 iPhone 上按预期工作,但在 iPad 上却没有。

从下面的图像中,您将看到状态栏(运营商、时间、电池)在 iPhone 上按预期呈现,但在 iPad 上却没有:

首先是 iPhone

现在的 iPad:

(注意:由于这是我第一次发帖,我不能直接嵌入图像,对此感到抱歉)。

从编码的角度来看,我已经尝试了所有建议:How to change Status Bar text color in iOS 7 without any lucky。

我所拥有的使应用程序按预期呈现的是我的 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 一样呈现为白色。

有什么建议么?

PS 我不确定这是否有助于将事情指向正确的方向,但 iPad 使用的是 splitview 控制器。

谢谢

4

4 回答 4

8

Because the status bar is going to use the preference of the root view controller, adjusting the preferred status bar style for your navigation controllers will not work on iPad, since none of them are the root view controller. You must, therefore, override preferredStatusBarStyle in a subclass of UISplitViewController.

@implementation DGBaseSplitViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

@end
于 2013-09-26T03:59:48.367 回答
5

按照 Wayne 的建议对 SplitViewController 进行子类化很可能是一个有效的解决方案,但这就是我最终为我的目的解决问题的方法。

  1. 设置 UI 状态栏 Hidden = TRUE(我不希望启动屏幕上的状态栏)[在 .plist 中存储为 UIStatusBarHidden=true & UIStatusBarHidden~ipad = true]

  2. 在 .plist 中设置 – UIStatusBarStyle = UIStatusBarStyleLightContent

  3. 在 .plist 中设置 – UIViewControllerBasedStatusBarAppearance = false

  4. 在我的 AppDeligate 中,靠近顶部,我添加了以下行:

    [UIApplication sharedApplication] setStatusBarHidden:NO];

    它负责在显示初始屏幕后重新显示状态栏。

于 2013-09-26T14:00:51.577 回答
0

的组合 :

  1. 查看基于控制器的状态栏外观 = NO

  2. 状态栏样式 = UIStatusBarStyleLightContent

为我工作

于 2014-10-06T14:16:54.767 回答
0

尝试将Status bar style~ipad:UIStatusBarStyleLightContent在您的 info.plist 中。

于 2013-09-25T19:47:42.787 回答