Pembaruan pada 19 September 2013:
memperbaiki bug penskalaan dengan menambahkan
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
kesalahan ketik dikoreksi dalam NSNotificationCenter
pernyataan
Pembaruan pada 12 September 2013:
dikoreksi UIViewControllerBasedStatusBarAppearance
menjadiNO
menambahkan solusi untuk aplikasi dengan rotasi layar
menambahkan pendekatan untuk mengubah warna latar belakang bilah status.
Tampaknya, tidak ada cara untuk mengembalikan status bar iOS7 kembali ke cara kerjanya di iOS6.
Namun, kami selalu dapat menulis beberapa kode dan mengubah bilah status menjadi seperti iOS6, dan ini adalah cara terpendek yang dapat saya lakukan:
Diatur UIViewControllerBasedStatusBarAppearance
ke NO
dalam info.plist
(Untuk memilih tidak memiliki pengontrol tampilan, sesuaikan gaya bilah status sehingga kami dapat mengatur gaya bilah status dengan menggunakan metode UIApplicationstatusBarStyle.)
Di AppDelegate application:didFinishLaunchingWithOptions
, panggil
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;
untuk:
Periksa apakah itu iOS 7.
Setel konten bilah status menjadi putih, yang bertentangan dengan UIStatusBarStyleDefault.
Hindari subview yang bingkainya melampaui batas yang terlihat (untuk tampilan yang bergerak ke tampilan utama dari atas).
Buat ilusi bahwa bilah status membutuhkan ruang seperti di iOS 6 dengan menggeser dan mengubah ukuran bingkai jendela aplikasi.
Untuk aplikasi dengan rotasi layar,
gunakan NSNotificationCenter untuk mendeteksi perubahan orientasi dengan menambahkan
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationDidChangeStatusBarOrientation:)
name:UIApplicationDidChangeStatusBarOrientationNotification
object:nil];
di if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
dan menciptakan metode baru dalam 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);
}
}
Sehingga ketika orientasi berubah, itu akan memicu pernyataan beralih untuk mendeteksi orientasi layar aplikasi (Portrait, Upside Down, Landscape Left, atau Landscape Right) masing-masing dan mengubah bingkai jendela aplikasi masing-masing untuk menciptakan ilusi bilah status iOS 6.
Untuk mengubah warna latar belakang bilah status Anda:
Menambahkan
@property (retain, nonatomic) UIWindow *background;
di AppDelegate.h
untuk membuat background
sebuah properti di kelas Anda dan mencegah ARC dari deallocating itu. (Anda tidak harus melakukannya jika Anda tidak menggunakan ARC.)
Setelah itu Anda hanya perlu membuat UIWindow di 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];
Jangan lupa untuk @synthesize background;
setelah @implementation AppDelegate
!