2013年9月19日更新:
固定缩放bug添加
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一样,这是我能想到的最短的方法:
Set UIViewControllerBasedStatusBarAppearance to NO in info.plist (To opt out of having view controllers adjust the status bar style so that we can set the status bar style by using the UIApplicationstatusBarStyle method.)
In AppDelegate's application:didFinishLaunchingWithOptions, call
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语句来检测应用程序的屏幕方向(纵向,倒置,横向左,或横向右),并分别改变应用程序的窗口框架,以创建iOS 6状态栏错觉。
更改状态栏的背景颜色:
Add
@property (retain, nonatomic) UIWindow *background;
在AppDelegate.h中使背景成为类中的一个属性,并防止ARC释放它。(如果你不使用ARC,你不必这样做。)
之后,你只需要在if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)中创建UIWindow:
background = [[UIWindow alloc] initWithFrame: CGRectMake(0, 0, self.window.frame.size.width, 20)];
background.backgroundColor =[UIColor redColor];
[background setHidden:NO];
别忘了@synthesize background;@implementation AppDelegate!