2013 年 9 月 19 日更新:
通过添加修复缩放错误
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
更正了NSNotificationCenter
声明中的错别字
2013 年 9 月 12 日更新:
更正UIViewControllerBasedStatusBarAppearance
为NO
为具有屏幕旋转功能的应用添加了解决方案
添加了一种更改状态栏背景颜色的方法。
显然,没有办法将 iOS7 状态栏恢复到它在 iOS6 中的工作方式。
但是,我们总是可以编写一些代码并将状态栏变成类似 iOS6 的,这是我能想到的最短方法:
设置UIViewControllerBasedStatusBarAppearance
为NO
in info.plist
(选择不让视图控制器调整状态栏样式,以便我们可以使用 UIApplicationstatusBarStyle 方法设置状态栏样式。)
在 AppDelegate 中application:didFinishLaunchingWithOptions
,调用
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
[application setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.clipsToBounds =YES;
self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
//Added on 19th Sep 2013
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
}
return YES;
为了:
检查它是否是iOS 7。
将状态栏的内容设置为白色,而不是 UIStatusBarStyleDefault。
避免显示其框架超出可见边界的子视图(对于从顶部动画到主视图的视图)。
通过移动和调整应用程序的窗口框架大小来创建状态栏占用空间的错觉,就像它在 iOS 6 中一样。
对于具有屏幕旋转功能的应用,
使用 NSNotificationCenter 通过添加来检测方向变化
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
在if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
AppDelegate 中创建一个新方法:
- (void)applicationDidChangeStatusBarOrientation:(NSNotification *)notification
{
int a = [[notification.userInfo objectForKey: UIApplicationStatusBarOrientationUserInfoKey] intValue];
int w = [[UIScreen mainScreen] bounds].size.width;
int h = [[UIScreen mainScreen] bounds].size.height;
switch(a){
case 4:
self.window.frame = CGRectMake(0,20,w,h);
break;
case 3:
self.window.frame = CGRectMake(-20,0,w-20,h+20);
break;
case 2:
self.window.frame = CGRectMake(0,-20,w,h);
break;
case 1:
self.window.frame = CGRectMake(20,0,w-20,h+20);
}
}
这样当方向改变时,它会触发一个 switch 语句来检测应用的屏幕方向(Portrait、Upside Down、Landscape Left 或 Landscape Right)并分别改变应用的窗口框架以创建 iOS 6 状态栏错觉。
要更改状态栏的背景颜色:
添加
@property (retain, nonatomic) UIWindow *background;
在您的班级中AppDelegate.h
创建background
一个属性并防止 ARC 释放它。(如果您不使用 ARC,则不必这样做。)
之后,您只需要在以下位置创建 UIWindow if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
:
background = [[UIWindow alloc] initWithFrame: CGRectMake(0, 0, self.window.frame.size.width, 20)];
background.backgroundColor =[UIColor redColor];
[background setHidden:NO];
别忘了@synthesize background;
追@implementation AppDelegate
!