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语句以检测应用程序的屏幕方向(纵向,上下颠倒,左横向或右横向)并分别更改应用的窗口框架,以创建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
!