我正在努力解决ios7 / objective-c问题,希望有人能够帮助我。
作为一些背景,我有一个应用程序在io6设备上按预期呈现,但我试图使其符合ios7。
事情变得令人困惑的是,我的代码在iPhone上按预期工作但不在iPad上。
从下面的图片中可以看到状态栏(运营商,时间,电池)在iPhone上呈现出预期效果,而不是iPad:
(注意:由于这是我的第一个帖子,我无法直接嵌入图片,对不起)。
从编码的角度来看,我已经尝试了How to change Status Bar text color in iOS 7所示的所有建议而没有任何运气。
我所拥有的使App按预期呈现的是我的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一样呈现白色。
有什么建议吗?
P.S。我不确定这是否有助于指明正确的方向,但iPad正在使用splitview控制器。
由于
答案 0 :(得分:8)
由于状态栏将使用根视图控制器的首选项,因此调整导航控制器的首选状态栏样式将无法在iPad上运行,因为它们都不是根视图控制器。因此,您必须覆盖preferredStatusBarStyle
的子类中的UISplitViewController
。
@implementation DGBaseSplitViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
@end
答案 1 :(得分:5)
根据Wayne的推荐对SplitViewController进行子类化,可能是一个有效的解决方案,但这就是我最终做的,为我的目的解决了这个问题。
设置UI状态栏隐藏= TRUE(我不想打开状态栏 启动屏幕)[存储在.plist中 UIStatusBarHidden = true& UIStatusBarHidden~ipad = true]
在.plist中设置 - UIStatusBarStyle = UIStatusBarStyleLightContent
在.plist中设置 - UIViewControllerBasedStatusBarAppearance = false
在我的AppDeligate中,靠近顶部,我添加了一行:
[UIApplication sharedApplication] setStatusBarHidden:NO];
在显示初始屏幕后,它会负责重新显示状态栏。
答案 2 :(得分:0)
尝试将Status bar style~ipad
:UIStatusBarStyleLightContent
放入info.plist。
答案 3 :(得分:0)
组合:
查看基于控制器的状态栏外观=否
状态栏样式= UIStatusBarStyleLightContent
为我工作