Cập nhật vào ngày 19 tháng 9 năm 2013:
sửa lỗi mở rộng quy mô bằng cách thêm
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
sửa lỗi chính tả trong NSNotificationCenter
câu
Cập nhật vào ngày 12 tháng 9 năm 2013:
sửa UIViewControllerBasedStatusBarAppearance
thànhNO
đã thêm một giải pháp cho các ứng dụng có xoay màn hình
đã thêm một cách tiếp cận để thay đổi màu nền của thanh trạng thái.
Rõ ràng, không có cách nào để hoàn nguyên thanh trạng thái iOS7 trở lại cách nó hoạt động trong iOS6.
Tuy nhiên, chúng tôi luôn có thể viết một số mã và biến thanh trạng thái thành giống như iOS6 và đây là cách ngắn nhất tôi có thể đưa ra:
Đặt UIViewControllerBasedStatusBarAppearance
để NO
ở info.plist
(Để chọn không tham gia có quan điểm điều khiển điều chỉnh tình trạng phong cách thanh để chúng tôi có thể thiết lập các phong cách thanh trạng thái bằng cách sử dụng phương pháp UIApplicationstatusBarStyle.)
Trong AppDelegate application:didFinishLaunchingWithOptions
, hãy gọi
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;
để mà:
Kiểm tra xem đó có phải là iOS 7 không.
Đặt nội dung của thanh trạng thái thành màu trắng, trái ngược với UIStatusBarStyleDefault.
Tránh các cuộc phỏng vấn có khung hình vượt ra ngoài giới hạn hiển thị để hiển thị (đối với các chế độ xem hoạt hình vào chế độ xem chính từ trên xuống).
Tạo ảo giác rằng thanh trạng thái chiếm không gian như trong iOS 6 bằng cách thay đổi và thay đổi kích thước khung cửa sổ của ứng dụng.
Đối với các ứng dụng có màn hình xoay,
sử dụng NSNotificationCenter để phát hiện các thay đổi hướng bằng cách thêm
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
trong if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
và tạo một phương thức mới trong 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);
}
}
Vì vậy, khi thay đổi hướng, nó sẽ kích hoạt câu lệnh chuyển đổi để phát hiện hướng màn hình của ứng dụng (Chân dung, Lộn ngược, Cảnh trái hoặc Cảnh phải) và thay đổi khung cửa sổ của ứng dụng để tạo ảo giác trên thanh trạng thái iOS 6.
Để thay đổi màu nền của thanh trạng thái của bạn:
Thêm vào
@property (retain, nonatomic) UIWindow *background;
trong AppDelegate.h
để thực hiệnbackground
một thuộc tính trong lớp của bạn và ngăn ARC giải phóng nó. (Bạn không phải làm điều đó nếu bạn không sử dụng ARC.)
Sau đó, bạn chỉ cần tạo UIWindow trong 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];
Đừng quên @synthesize background;
sau @implementation AppDelegate
!