ไม่สามารถซ่อนแถบสถานะใน iOS7


267

ฉันเพิ่งอัพเกรด iPhone 5 iOS 7 เป็นรุ่นเบต้าสี่ตัว ตอนนี้เมื่อฉันรันแอพของฉันจาก Xcode 5 บน iPhone นี้แถบสถานะจะไม่ซ่อนแม้ว่ามันจะควร

ไม่ทำงาน:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];

ไม่ทำงาน:

[UIApplication sharedApplication].statusBarHidden = YES;

ไม่สามารถลงชื่อเข้าใช้ฟอรัมนักพัฒนาของ Apple


15
ไม่จริงคำตอบของฉันเกี่ยวข้องกับ Xcode และแสดงต่อสาธารณะทั่วไปแล้ว มันธรรมดาเกินกว่าที่จะพูดว่า 'ถ้าคุณตอบคำถามนี้มันเป็นการละเมิดของ NDA' .. ให้นักพัฒนาตัดสินใจด้วยตัวเอง ;-)
Jake

ซ้ำเป็นไปได้ของแถบสถานะจะไม่หายไป
ekhumoro

วิธีการซ่อนแถบสถานะโดยเฉพาะอย่างยิ่ง ViewController โดยทางโปรแกรม
bhavik

คำตอบ:


558

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

โปรดทราบว่าสิ่งนี้จะไม่ทำงานหากคุณใช้ UIImagePickerController ในแอป

จากhttp://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/ , โซลูชั่นของ mgiroux

ตัวอย่างการเพิ่ม View Base Controller ให้กับการตั้งค่าข้อมูลของคุณใน Xcode


3
! ที่น่าตื่นตาตื่นใจ ฉันเสียเวลากับอันนี้! ขอบคุณ!
Idan

12
สำหรับการอ้างอิงค่าดิบเก็บไว้ในแฟ้ม Info.plist UIViewControllerBasedStatusBarAppearanceที่เกิดขึ้นจริงจะเรียกว่า
Adam Rosenfield

55
ปัญหาเดียวของวิธีนี้คือถ้าคุณใช้ UIImagePickerController เพื่อเลือกรูปภาพมันจะบังคับให้แถบสถานะปรากฏขึ้นอีกครั้งวิธีที่จะทำให้แน่ใจได้คือการใช้วิธีการ prefersStatusBarHidden ในแต่ละมุมมองคอนโทรลเลอร์ของคุณและรีเซ็ต UIViewControllerBasedStatusBarAppearance ตั้งค่าให้เป็นจริง
Jason Fuerstenberg

5
ฉันไม่รู้จริงๆว่าทำไม Apple ถึงเปลี่ยนแปลงสิ่งนี้! ขอบคุณ :)
Mohamed Amine

18
นอกจากนี้คุณยังจะต้องมีการตั้งค่าStatus bar is initially hiddenที่จะใช่
Zorayr

277

เพิ่มวิธีในตัวควบคุมมุมมองของคุณ

- (BOOL)prefersStatusBarHidden {
    return YES;
}

35
สำหรับผู้ที่กำลังมองหานี่คือวิธีที่จะทำหากคุณต้องการลบแถบสถานะในมุมมองบางอย่างแบบไดนามิก วิธีการนี้ใช้งานได้โดยไม่คำนึงถึงสิ่งที่คุณตั้งค่า "ดูแถบสถานะตามตัวควบคุม" เป็น Plist ของคุณ!
นาย T

2
+1 b / c ฉันกำลังมองหาความสามารถในการแสดง / ซ่อนแถบสถานะแบบไดนามิก วิธีการตั้งค่า P-list (ดูโพสต์โดย @Satgi ด้านบน) เป็นวิธีที่ดีที่สุดในการแสดง / ซ่อนแถบสถานะทั่วโลก
JonnyB

หากคุณมีคลังภาพอยู่ที่ไหนสักแห่งคุณมักจะต้องการซ่อนส่วนควบคุมที่นั่นเท่านั้นและคุณสามารถเปิด / ปิดได้เช่นกัน ฟังก์ชั่นนี้ใช้ไม่ได้สำหรับฉัน ฉันอยู่ในสถานที่เดียวกันเป็นที่ต้องการสถานะของบาร์และเรียกว่า
Cristi Băluță

4
@ Mr.T ใน iOS 8 ดูเหมือนว่าจะไม่มีอีกต่อไปแล้ว หากคุณตั้งค่าลักษณะที่ปรากฏของแถบควบคุมสถานะเป็น NO และคืนค่าจริงจากprefersStatusBarHiddenในตัวควบคุมมุมมองมันจะไม่ทำงาน แถบสถานะยังคงปรากฏขึ้น
Isuru

1
@ Isuru ทำไมคุณถึงตั้งค่าเป็นไม่? ถ้าคุณตั้งค่าเป็นใช่มันจะถามทุกตัวควบคุมมุมมองในกรณีอื่นแน่นอนมันจะไม่
invoodoo

84

ใน Plist เพิ่มคุณสมบัติต่อไปนี้

-> Status bar is initially hidden= ใช่

-> View controller-based status bar appearance= ไม่

เพิ่มทั้งคู่ตอนนี้แถบสถานะจะหายไป


ใช่สิ่งนี้ได้ผลกับฉันด้วย หากไม่มีการตั้งค่าตัวเลือก "แถบสถานะถูกซ่อนอยู่ในขั้นต้น" เป็นใช่มันไม่ทำงานตามที่คาดไว้ ขอบคุณ.
AndrewShmig

53

ในการซ่อนแถบสถานะในมุมมองเดียวคุณควรใช้:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

ในตอนแรกสิ่งนี้ไม่ได้ผลสำหรับฉันแล้วเห็นในเอกสารประกอบของวิธีการนี้ที่ระบุว่า: // การตั้งค่าสถานะBarHiddenไม่ได้ทำอะไรเลยหากแอปพลิเคชันของคุณใช้ระบบแถบสถานะที่ใช้ UIViewController

นี้จะต้องมีการดำเนินการเกี่ยวกับไฟล์ plist เพิ่มกุญแจสำคัญในการกำหนดให้View controller-based status bar appearance NOแล้วมันก็ใช้งานได้


16

ในการใช้วิธี UIApplication แบบดั้งเดิมเพื่อซ่อน / แสดงแถบสถานะแอปของคุณจะต้องตั้งค่า plist สำหรับ iOS 7:

View-Controller Based Status Bar Appearance = NO

ค่านี้ถูกตั้งค่าเป็น YES โดยค่าเริ่มต้น หากคุณเปลี่ยนเป็นไม่ใช่คุณสามารถใช้วิธีดั้งเดิมได้ หากคุณปล่อยให้ตั้งค่าเป็น YES คุณยังสามารถซ่อนแถบสถานะได้ แต่ขึ้นอยู่กับคลาสย่อยของคอนโทรลเลอร์มุมมองแต่ละรายการในแอปของคุณเพื่อแทนที่: prefersStatusBarHiddenเพื่อส่งคืน YES

เมื่อใดก็ตามที่แอปของคุณต้องการลักษณะแถบสถานะหรือการมองเห็นที่จะเปลี่ยนแปลงและลักษณะที่ปรากฏตามแถบควบคุมสถานะถูกตั้งค่าเป็น YES ตัวควบคุมมุมมองด้านนอกสุดของคุณจำเป็นต้องโทร:

setNeedsStatusBarAppearanceUpdateAnimation


ฉันต้องนำไปใช้กับคุณสมบัติเป้าหมาย iOS ที่กำหนดเองเพราะในการ
วางแผน

16

ในการซ่อนแถบสถานะใน iOS7 คุณต้องมีรหัส 2 บรรทัด

  1. ความไม่เหมาะสม: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsเขียน

    [application setStatusBarHidden:YES];
  2. ใน info.plist เพิ่มสิ่งนี้

    View-Controller Based Status Bar Appearance = NO

2
เพียงล้างสิ่งนี้หากคุณใส่สิ่งนี้ไว้ภายใน[application setStatusBarHidden:YES];application.statusBarHidden = YES;
เสร็จสิ้นการเปิดตัว

อาจมีการพิมพ์ผิดในคำตอบข้างต้น "ลักษณะที่ปรากฏตามแถบสถานะของตัวควบคุม = ไม่" ไม่ได้ผลสำหรับฉัน แต่ "ดูลักษณะของแถบสถานะที่ใช้ตัวควบคุม = ไม่" ทำงานได้
tmr

11

มีชุดค่าผสมมากมายที่แนะนำสำหรับปัญหานี้ แต่ปัญหาคือ iOS 6 และ 7 ใช้วิธีการต่าง ๆ เพื่อซ่อนแถบสถานะ ฉันไม่เคยประสบความสำเร็จในการตั้งค่าการตั้งค่าแบบ plist เพื่อเปิดใช้งานลักษณะ iOS6 บน iOS 7 แต่ถ้าคุณสร้างแอปของคุณเพื่อรองรับ iOS 6+ คุณต้องใช้ 3 วิธีพร้อมกันเพื่อให้แน่ใจว่าตัวควบคุมมุมมองเฉพาะซ่อนสถานะ บาร์:

// for ios 7 
- (BOOL)prefersStatusBarHidden{
    return YES;
}

// for ios 6
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // explicitly set the bar to show or it will remain hidden for other view controllers
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

สิ่งนี้จะทำงานโดยไม่คำนึงถึงการตั้งค่าของคุณ


7

ฉันต้องทำการเปลี่ยนแปลงทั้งสองด้านล่างเพื่อซ่อนแถบสถานะ:

เพิ่มรหัสนี้ไปยังตัวควบคุมมุมมองที่คุณต้องการซ่อนแถบสถานะ:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

เพิ่มสิ่งนี้ไปยังไฟล์. plist ของคุณ (ไปที่ 'ข้อมูล' ในการตั้งค่าแอปพลิเคชันของคุณ)

View controller-based status bar appearance --- NO

จากนั้นคุณสามารถเรียกบรรทัดนี้เพื่อซ่อนแถบสถานะ:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

6

เพียงเพิ่ม 2 บรรทัดในไฟล์ info.plist มันจะทำให้การแก้ไขสำหรับ iOS7 และรุ่นที่เก่ากว่าทั้งสอง

  • แถบสถานะถูกซ่อนเริ่มแรก = ใช่
  • ดูลักษณะแถบสถานะตามคอนโทรลเลอร์ = NO

นำทางไปยังโครงการและเลือกเป้าหมาย -> ทั่วไปและดูช่องทำเครื่องหมาย "สไตล์แถบสถานะ ... ซ่อนระหว่างการเปิดตัวแอปพลิเคชัน" จะถูกทำเครื่องหมาย สิ่งนี้จะได้ผล


6

ลองวิธีการง่ายๆนี้:

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

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

4

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

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

4

วิธีที่ง่ายที่สุดที่ฉันได้พบในการซ่อนแถบสถานะตลอด app ทั้งหมดคือโดยการสร้างcategoryบนและเอาชนะUIViewController prefersStatusBarHiddenวิธีนี้คุณไม่ต้องเขียนวิธีนี้ในทุก ๆ มุมมองคอนโทรลเลอร์

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + HideStatusBar.m

#import "UIViewController+HideStatusBar.h"

@implementation UIViewController (HideStatusBar)

//Pragma Marks suppress compiler warning in LLVM. 
//Technically, you shouldn't override methods by using a category, 
//but I feel that in this case it won't hurt so long as you truly 
//want every view controller to hide the status bar. 
//Other opinions on this are definitely welcome

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

#pragma clang diagnostic pop


@end

ของจริงที่ดีที่สุด, iOS7, วิธีแก้ปัญหาที่ไม่ใช่ของปลอม, ยอดเยี่ยม
Fattie

3
  1. กรุณาเพิ่ม ----

    ดูลักษณะแถบสถานะตามคอนโทรลเลอร์ --- ไม่

  2. ในแต่ละ viewController เขียน

    - (void) viewDidLayoutSubviews
    {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = 20.0;
        viewBounds.origin.y = -topBarOffset;
        self.view.bounds = viewBounds;
    
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style
    }

สำหรับปัญหาแถบสถานะใน iOS 7 แต่เป้าหมายควรเป็น 5.1 ขึ้นไปสำหรับแอป


3

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

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

3

ขั้นตอนสำหรับซ่อนแถบสถานะใน iOS 7:

1. ไปที่ไฟล์ข้อมูลแอปพลิเคชันของคุณ

2. และตั้งค่า, ดูลักษณะแถบสถานะตามคอนโทรลเลอร์: บูลีน NO

หวังว่าฉันจะแก้ไขปัญหาแถบสถานะ .....


3

สำหรับ iOS 7 ในมุมมองเดียวใช้ใน viewWillappear วิธีการ:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

สำหรับการแสดงแถบสถานะให้ใช้:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];


2

ในไฟล์ Info Plist เพิ่มแถวสำหรับคุณสมบัติต่อไปนี้

ชื่อคุณสมบัติ: ดูลักษณะแถบสถานะที่ใช้ควบคุม

ค่า: ไม่


1

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

1

ฉันลองตัวเลือกทั้งหมดเหล่านี้โพสต์ที่นี่ในโครงการของฉันและพวกเขาจะไม่ทำงาน ฉันคิดว่ามันน่าจะเกี่ยวกับความจริงที่ว่าฉันได้ทำการอัพเดทXcodeแล้วจากนั้นก็เป็นแอพสำหรับ iOS 7 และการตั้งค่าบางอย่างก็เกิดความสับสน ฉันตัดสินใจที่จะสร้างโครงการใหม่ที่สมบูรณ์สำหรับโครงการและหลังจากตั้งค่าง่าย ๆ เพียง: " Status bar is initially hidden = YES" และ " View controller-based status bar appearance = NO" ตามที่ระบุโดยคนอื่น ๆ หลายคนทำงานได้อย่างถูกต้อง (เช่นไม่มีแถบสถานะ)

ดังนั้นคำแนะนำของฉันหากคุณกำลังทำงานในโครงการที่ได้รับการอัปเดตเป็น iOS 7 จากเวอร์ชันเก่าและลองใช้ตัวเลือกอื่น ๆ ทั้งหมดเพื่อสร้างโครงการใหม่


ฉันใช้เทคนิคเดียวกันนี้ในตอนแรกเพื่อยืนยันว่าฉันสามารถซ่อนแถบสถานะได้ทั่วโลกสำหรับทุกหน้าจอ แต่เนื่องจากแอพของฉันค่อนข้าง "เป็นศูนย์กลาง" ฉันจึงต้องการให้แสดงเวลาสำหรับหน้าจอส่วนใหญ่ มันเป็นเพียงหน้าจอเดียวที่ฉันต้องการยกเว้นสำหรับเหตุผลต่างๆ ฉันลงเอยด้วยการใช้พารามิเตอร์ตรงข้ามของคุณ: เริ่มแรกซ่อน = ไม่ & การปรากฏตัวของแถบสถานะตาม VC = ใช่ จากนั้นฉันต้องใส่ (BOOL) ชอบวิธี StatusBarHidden (คืน YES) ลงใน VC หนึ่งที่ฉันต้องการซ่อนไว้ ทำงานได้ดี ฉันควรเพิ่มว่าแอปของฉันเป็น iOS7 เท่านั้นสำหรับเหตุผลอื่น
bobsmells

1

สำหรับ 2019 ...

ในการสร้างแอปที่ไม่มีแถบสถานะ

คลิก info.plist คลิกขวาที่ "เพิ่มแถว"

เพิ่มทั้งสองนี้ด้วยการตั้งค่าเหล่านี้:

ป้อนคำอธิบายรูปภาพที่นี่

นั่นคือทั้งหมดที่มีให้มัน




0

เพื่อซ่อนแถบสถานะสำหรับ viewController เฉพาะ

- (BOOL)prefersStatusBarHidden {
    return YES;
}

สำหรับการตั้งค่าแถบสถานะที่ซ่อนอยู่สำหรับแอปพลิเคชัน:

  • ตั้งค่าView controller-based status bar appearanceเป็นNO. plist และใน application: didFinishLaunchingWithOptions:ชุด: [application setStatusBarHidden:YES];

    หมายเหตุ: setStatusBarHidden: เลิกใช้แล้ว

หรือ

  • ในการตั้งค่าโครงการ -> แท็บทั่วไป -> ข้อมูลการปรับใช้

    ตรวจสอบHide Status barกล่อง


-1
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

คำถามระบุอย่างชัดเจนว่าวิธีนี้ใช้ไม่ได้ โปรดอ่านคำถามอย่างรอบคอบก่อนที่จะตอบ
Borys Verebskyi

ตราบใดที่การดูแถบสถานะตามตัวควบคุมถูกตั้งค่าเป็น NO มันเป็นวิธีที่สะอาดที่สุด
Evan Ische

-7

ฉันไม่แน่ใจว่าทำไมคุณ "ไม่สามารถลงชื่อเข้าใช้ฟอรัมนักพัฒนา Apple" แต่ (โดยไม่ละเมิด NDA) คุณสามารถซ่อนสถานะของคุณผ่านบาร์โค้ด Xcode ได้ เป็นการตั้งค่าทั่วไปตามเป้าหมายแอปพลิเคชันของคุณป้อนคำอธิบายรูปภาพที่นี่


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