อัปเดตเมื่อ 19 ก.ย. 2556:
แก้ไขข้อบกพร่องในการปรับขนาดโดยการเพิ่ม
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
แก้ไขการพิมพ์ผิดในNSNotificationCenter
คำสั่ง
อัปเดตเมื่อ 12 ก.ย. 2556:
แก้ไขUIViewControllerBasedStatusBarAppearance
เป็นNO
เพิ่มโซลูชันสำหรับแอพที่มีการหมุนหน้าจอ
เพิ่มวิธีการเปลี่ยนสีพื้นหลังของแถบสถานะ
เห็นได้ชัดว่าไม่มีวิธีเปลี่ยนแถบสถานะ iOS7 กลับไปเป็นวิธีการทำงานใน iOS6
อย่างไรก็ตามเราสามารถเขียนโค้ดและเปลี่ยนแถบสถานะให้เป็นเหมือน iOS6 ได้เสมอและนี่คือวิธีที่สั้นที่สุดที่ฉันสามารถทำได้:
ตั้งค่าUIViewControllerBasedStatusBarAppearance
เป็นNO
ใน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);
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);
}
}
ดังนั้นเมื่อการวางแนวเปลี่ยนไปมันจะเรียกใช้คำสั่งสวิตช์เพื่อตรวจจับการวางแนวหน้าจอของแอพ (แนวตั้ง, กลับหัว, แนวนอนซ้ายหรือแนวนอนขวา) และเปลี่ยนกรอบหน้าต่างของแอพตามลำดับเพื่อสร้างภาพลวงตาแถบสถานะ iOS 6
ในการเปลี่ยนสีพื้นหลังของแถบสถานะของคุณ:
เพิ่ม
@property (retain, nonatomic) UIWindow *background;
ในการAppDelegate.h
ที่จะทำให้background
สถานที่ให้บริการในชั้นเรียนของคุณและป้องกัน ARC จาก deallocating มัน (คุณไม่จำเป็นต้องทำถ้าคุณไม่ได้ใช้ 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
!