แถบสถานะจะไม่หายไป


112

ฉันกำลังสร้างแอปพลิเคชันและต้องการซ่อนแถบสถานะ เมื่อฉันทดสอบแอปแถบสถานะจะซ่อนอยู่ในขณะที่หน้าจอเริ่มต้นปรากฏขึ้น แต่เมื่อโหลดแอปจนเต็มแล้วแถบสถานะจะปรากฏขึ้นอีกครั้ง

ฉันใช้ Xcode 5 และ iOS 7 และได้ลองปิดแถบสถานะโดยใช้โปรแกรมแล้ว

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

ในไฟล์ info.plist และใช้ตัวตรวจสอบแอตทริบิวต์บนไฟล์. xib ดูเหมือนจะไม่ทำงาน

ความคิดใด ๆ ?

คำตอบ:


220

ลองเพิ่มวิธีการต่อไปนี้ในตัวควบคุมมุมมองรูทของแอปของคุณ:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
จะทำทั่วโลกได้อย่างไร?
jjxtra

16
ตามที่ระบุไว้ในเอกสารของ Apple คุณควรเรียก[self setNeedsStatusBarAppearanceUpdate];หลังจากเรียกวิธีนี้ด้วยสิ่งอื่นที่ไม่ใช่ค่าเริ่มต้น (ค่าเริ่มต้นคือ NO)
สัน

3
@PsychoDad ตรวจสอบคำตอบของฉันสำหรับโซลูชันระดับโลกเพิ่มเติม
Idan

2
สมบูรณ์แบบขอบคุณ ฉันคิดไม่ออกว่าทำไม iOS 7 ถึงทำสิ่งนี้และไม่เคารพ XIB ที่มีการตั้งค่าแถบสถานะ!
justinhartman

1
การเพิ่มสิ่งนี้บน ViewController ที่เพิ่มเข้าไปในสแต็กเป็นสิ่งที่ฉันต้องการเพื่อซ่อนแถบสถานะในวิวคอนโทรลเลอร์นั้น แถบสถานะจะส่งคืนเมื่อตัวควบคุมมุมมองนี้ถูกลบออก
MacD

126

คุณควรเพิ่มค่านี้ใน plist: " ดูลักษณะแถบสถานะตามคอนโทรลเลอร์ " และตั้งค่าเป็น " NO "

นี้จะช่วยให้คุณสามารถตั้งค่าแถบสถานะเพื่อโหมดซ่อน สิ่งนี้ตั้งค่าเป็นสากลซึ่งแตกต่างจากคำตอบอื่น ๆ ที่ให้ไว้

อัปเดต:หากคุณต้องการให้แถบสถานะซ่อนอยู่บนหน้าจอเริ่มต้นอย่าลืมทำเครื่องหมาย " ซ่อนระหว่างการเปิดแอปพลิเคชัน " บนตัวเลือกแถบสถานะเป้าหมาย นอกจากนี้คุณสามารถเพิ่ม " แถบสถานะถูกซ่อนในตอนแรก " เป็น " ใช่ " ใน plist หากคุณไม่ต้องการใช้โค้ดภายในแอป


2
ฉันใช้เวลามากในการคิดออก เป็นปัญหาที่ฉันคิดว่าทุกคนคงมีและ Apple ก็ไม่ได้พูดถึงมันมากพอ ยินดีช่วย ...
Idan

7
ใช้งานได้ดีอย่าลืมตั้งค่า. plist สำหรับ "แถบสถานะถูกซ่อนในตอนแรก" เป็นใช่
andreas-supersmart

1
ว้าวนั่นเป็นสิ่งเดียวที่ใช้ได้กับ Kobold2d 2.1.0 และ iOS 7 ขอบคุณมาก!
Binarian

5
Apple ไม่ได้เป็นตัวแทนของความเข้ากันได้แบบย้อนหลัง มาเต้นรำไปกับฟลุตของพวกเขาและอัปเดตแอปของเราทุกคน ขออภัยระบายความไม่พอใจ เกิดจาก Apple.
Henrik Erlandsson

1
ในที่สุดมันก็ได้ผลสำหรับฉัน เนื่องจาก - (BOOL) ชอบวิธีการที่ต้องห้ามของสเตตัสไม่ทำงานใน modelview
utkal patel

73

รหัสที่คุณโพสต์ใช้ได้กับ iOS 6.1 และต่ำกว่า สำหรับ iOS 7 Apple ได้จัดทำวิธีการใหม่ ๆ เพื่อควบคุมแถบสถานะสำหรับแต่ละมุมมองโดยตรง การปิดตัวเลือกนี้ในInfo.plistของคุณจะช่วยให้คุณสามารถซ่อนแถบสถานะได้อย่างน้อยที่สุดสำหรับตัวอย่างนักพัฒนาปัจจุบัน (4)

เพิ่มสิ่งนี้และตั้งค่าเป็น NO

สำหรับการอ้างอิงโปรดดูคู่มือการเปลี่ยน iOS 7 ที่มีอยู่ในพอร์ทัลนักพัฒนาของ Apple


3
ในความคิดของฉันคำตอบนี้ดีกว่าเพราะในแอปของฉันฉันต้องการซ่อนแถบสถานะในโหมดแนวนอนเท่านั้นขอบคุณ!
Son Nguyen

ขอบคุณสิ่งนี้ช่วยฉันได้เนื่องจากฉันต้องการซ่อนมันสำหรับแอปทั้งหมดของฉัน
kevinl

2
ในความคิดของฉันคำตอบนี้น่าจะเป็นคำตอบที่ดีที่สุด -> มีคำอธิบายที่นี่developer.apple.com/library/prerelease/ios/documentation/…
marceloquinta

5
ฉันได้ทำสิ่งนี้แล้ว แต่ดูเหมือนว่ามันจะซ่อนแถบสถานะไว้เท่านั้นอย่างไรก็ตามแอปของฉันยังคงถูก 'กดลง' ตามจำนวนพื้นที่ที่แถบสถานะจะใช้งานและฉันยังเห็นไฟแสดงสถานะแบตเตอรี่อยู่!
vedran

36

ฉันลองซ่อนแถบสถานะในแอปทั้งหมดของฉันและใน "app" -info.plist และฉันเพิ่มสองแถวในพจนานุกรม "รายการทรัพย์สินข้อมูล" ฉันเพิ่ม "ดูลักษณะแถบสถานะตามตัวควบคุม" ตั้งค่า NO และใน " แถบสถานะถูกซ่อนในตอนแรก "ตั้งใช่และสำหรับฉันใช้งานได้ n_n '

ข้อมูล plist


2
สิ่งนี้บังคับให้แอปของคุณเข้าสู่โหมดความเข้ากันได้ที่ออกแบบมาเพื่อให้แอปเก่าทำงานได้ตามที่ตั้งใจไว้ใน iOS 7 เท่านั้นเมื่อนักพัฒนาไม่มีเวลาแก้ไขแอปสำหรับวิธีใหม่ในการทำสิ่งต่างๆ แต่คุณต้องใช้เมธอดที่ชอบ * ในตัวควบคุมมุมมองของคุณแทน
lhunath

17

อย่างไรก็ตามหากคุณใช้ UIImagePicker แถบสถานะจะปรากฏขึ้นอีกครั้ง

ในกรณีนี้คุณควรซ่อนแถบสถานะดังต่อไปนี้

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
ฉันมีปัญหาเดียวกัน แถบสถานะถูกซ่อนไว้จนกว่าฉันจะใช้ UIImagePicker ฉันลองวิธีแก้ปัญหาของคุณแล้ว แต่มันไม่ได้ผลสำหรับฉัน ฉันต้องเพิ่มอะไรนอกจากโค้ดในโพสต์ของคุณหรือไม่?
Dev01

@WootWoot ฉันยังเพิ่ม - (BOOL) ชอบStatusBarHidden {return YES; } เพื่อดูตัวควบคุม โปรดลองดู
เดียว

ดูเหมือนจะไม่ได้ผลสำหรับฉัน .. คุณควรโทรหาจริงsetNeedsStatusBarAppearanceUpdateเหรอ?
RyanM

ฉันต้องการซ่อนแถบสถานะเมื่อคลิกปุ่ม ฉันได้ลองใช้โค้ดด้านล่าง แต่ไม่ได้ผล ได้โปรดช่วยฉันหน่อย [[UIApplication sharedApplication] setStatusBarHidden: YES];
janitheshan

8

หลังจากค้นหามานานในที่สุดฉันก็พบวิธีง่ายๆที่ช่วยดูแลUIImagePickerControllerปัญหาด้วย

ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ ให้ตั้งค่าแถบสถานะของคุณที่ซ่อนอยู่ใน AppDelegate didFinishLaunching และตั้งค่า "ดูลักษณะแถบสถานะตามตัวควบคุม" เป็น NO

จากนั้นใน AppDelegate ของคุณ:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila - แถบสถานะของคุณจะยังคงซ่อนอยู่แม้ว่า UIImagePickerController จะสำคัญที่สุดก็ตาม

สิ่งนี้ดีกว่า 'ซ่อน' ทุกครั้งที่คุณนำเสนอ UIImagePickerController เนื่องจากยังคงซ่อนอยู่ตลอดทั้งแอป


2
แม้ว่าจะมีบางอย่างที่ดูเหมือนจะเสียใน iOS7 บน iPad อย่างน้อย UIImagePickerController ยังคงแสดงแถบสถานะในครั้งที่สองที่แสดง ... Hurrrr ... :-( ขณะนี้ฉันใช้ appDelegate พร้อมกับซ่อนมันอีกครั้งในทุกมุมมอง แม้ว่ามันจะดูสกปรกไปชั่วขณะ แต่ก็ได้รับการแก้ไขอย่างรวดเร็วอีกครั้ง
ikuramedia

1
นี่เป็นวิธีเดียวที่ใช้ได้ผลสำหรับฉันบน iOS8 ... แต่ชอบที่ StatusBarHidden ไม่ได้รับการเรียกใช้ตัวควบคุมมุมมองของฉัน
mojuba

7

หากต้องการซ่อนแถบสถานะบน UIViewController เฉพาะให้เพิ่มสิ่งนี้:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

หวังว่านี่จะช่วยได้!


!! นี่เป็นวิธีแก้ปัญหาที่เหมาะกับฉันใน iOS 9.2 การปรับเปลี่ยน plist ไม่มีผลใด ๆ
mico

5

คุณสามารถซ่อนจากสรุปโครงการ มีช่องทำเครื่องหมายซ่อนอยู่ระหว่างการเปิดตัว

ดูภาพรวม

ใส่คำอธิบายภาพที่นี่


4

ฉันพบวิธีนี้สำหรับฉัน มันใช้งานได้เหมือนมีเสน่ห์ เขียนโค้ดนี้บน viewcontroller ซึ่งคุณต้องการใช้ UIImagePickerController

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
     }

3

นอกจากคำตอบจากคนเดียวด้านบนแล้วอย่าลืมใช้เมธอด imagePickerControllerDidCancel และเพิ่มรหัสเดียวกันที่นั่นด้วย


2

ฉันมีปัญหากับ UIImagePicker เช่นกัน คล้ายกับคำตอบของ Alones ทางออกของฉันมีดังต่อไปนี้ ฉันเพิ่มบรรทัดหรือรหัสนี้:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

ไปยังฟังก์ชันนี้:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

ฉันยังไม่ได้ทดสอบกับ iOS 6 ขึ้นไป แต่มันใช้งานได้ดีใน iOS 7


2

โซลูชันที่รวดเร็ว

เพียงเพิ่มสิ่งนี้ลงในตัวควบคุมมุมมองของคุณ:

override func prefersStatusBarHidden() -> Bool {
    return true
}

0

ฉันใช้ Xcode 6 โซลูชันนี้ใช้ได้กับ iOS 7 และ 8 สำหรับฉัน:

ขั้นแรกตั้งค่า "ดูลักษณะแถบสถานะตามคอนโทรลเลอร์" เป็น NO ในไฟล์ plist

ประการที่สองใน AppDelegate ให้เพิ่มสิ่งนี้:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

0

ปัญหาของฉันคือฉันใช้ตัวควบคุมมุมมอง เฉพาะตัวควบคุมมุมมองด้านบนสุดซึ่งฝังอยู่ในตัวควบคุมการนำทางเท่านั้นที่สามารถซ่อนหรือแสดงแถบสถานะได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.