Không thể ẩn thanh trạng thái trong iOS7


267

Tôi vừa nâng cấp iPhone 5 iOS 7 lên bốn phiên bản beta. Bây giờ khi tôi chạy ứng dụng của mình từ Xcode 5 trên iPhone này, thanh trạng thái không bị ẩn, mặc dù vậy.

Không làm việc:

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

Không làm việc:

[UIApplication sharedApplication].statusBarHidden = YES;

Không thể đăng nhập vào Diễn đàn nhà phát triển của Apple


15
Không đúng, câu trả lời của tôi liên quan đến Xcode và điều đó đã được hiển thị cho công chúng. Thật quá chung chung để nói 'nếu bạn trả lời điều này, đó là vi phạm NDA' .. hãy để các nhà phát triển tự quyết định điều đó ;-)
Jake


Làm thế nào để ẩn thanh trạng thái cụ thể theo chương trình ViewContoder?
bhasta

Câu trả lời:


558

trong tập tin ứng dụng của bạn, hãy thêm một hàng gọi nó là "Xem sự xuất hiện của thanh trạng thái dựa trên bộ điều khiển" và đặt nó thành NO

Lưu ý rằng điều này chỉ đơn giản là không hoạt động, nếu bạn đang sử dụng UIImagePickerControll trong ứng dụng.

từ http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant- leather-status-bar /, giải pháp của mgiroux

Một ví dụ thêm Trình điều khiển cơ sở View vào cài đặt Thông tin của bạn trong Xcode


3
Kinh ngạc! Tôi lãng phí hàng giờ cho cái này! Cảm ơn bạn!
Idan

12
Để tham khảo, giá trị thô được lưu trữ trong tệp Info.plist thực tế được gọi UIViewControllerBasedStatusBarAppearance.
Adam Rosenfield

55
Vấn đề duy nhất với cách tiếp cận này là nếu bạn sử dụng UIImagePickerControll để chọn hình ảnh, nó sẽ buộc thanh trạng thái xuất hiện một lần nữa. Cách duy nhất chắc chắn để ngăn chặn điều này là thực hiện phương thức preiftsStatusBarHidden trong mỗi bộ điều khiển xem của bạn và đặt lại UIViewControllBasingStatus thiết lập plist là đúng.
Jason Fuerstenberg

5
Tôi thực sự không biết tại sao Apple lại thay đổi điều này! Cảm ơn :)
Mohamed Amine

18
Bạn cũng cần đặt Status bar is initially hiddenthành .
Zorayr

277

Thêm phương thức trong trình điều khiển xem của bạn.

- (BOOL)prefersStatusBarHidden {
    return YES;
}

35
Đối với tất cả những người tìm kiếm, đây là cách để làm điều đó nếu bạn muốn tự động loại bỏ thanh trạng thái trong các chế độ xem nhất định. Phương pháp này hoạt động bất kể bạn đặt "Xem giao diện thanh trạng thái dựa trên bộ điều khiển" ở chế độ nào!
Ông T

2
+1 b / c Tôi đang tìm kiếm khả năng tự động hiển thị / ẩn thanh trạng thái. Phương pháp cài đặt danh sách P (xem bài đăng của @Satgi ở trên) tuy nhiên là cách tốt nhất để hiển thị / ẩn thanh trạng thái trên toàn cầu.
JonnyB

Nếu bạn có một thư viện ảnh ở đâu đó bạn thường chỉ muốn ẩn các điều khiển ở đó và bạn cũng có thể bật / tắt nó. Điều này không làm việc cho tôi, chức năng thậm chí không được gọi. Tôi có cùng một vị trí ưa
thíchStatusBarStyle

4
@ Mr.T Trong iOS 8, dường như không còn như vậy nữa. Nếu bạn đã đặt giao diện thanh trạng thái dựa trên bộ điều khiển xem thành NO và trả về true từ prefersStatusBarHiddentrong bộ điều khiển xem, nó sẽ không hoạt động. Thanh trạng thái vẫn xuất hiện.
Isuru

1
@Isuru tại sao bạn lại đặt thành KHÔNG? Nếu bạn đặt thành CÓ, nó sẽ yêu cầu mọi trình điều khiển xem trong trường hợp khác, tất nhiên là không.
invoodoo

84

Trong Plist thêm các thuộc tính sau.

-> Status bar is initially hidden= CÓ

-> View controller-based status bar appearance= KHÔNG

Thêm cả hai - bây giờ thanh trạng thái sẽ biến mất.


Đúng, điều này cũng làm việc cho tôi. Nếu không đặt tùy chọn "Thanh trạng thái ban đầu bị ẩn" thành CÓ, nó không hoạt động như mong đợi. Cám ơn.
AndrewShmig

53

Để ẩn Thanh trạng thái trên một chế độ xem, bạn nên sử dụng:

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

Lúc đầu, điều này không hiệu quả với tôi, và sau đó một cái cưa trong tài liệu của phương thức này có nội dung: // Đặt statusBarHidden không làm gì nếu ứng dụng của bạn đang sử dụng hệ thống thanh trạng thái dựa trên UIViewContoder mặc định.

Điều này phải được thực hiện trên tệp plist, thêm khóa View controller-based status bar appearanceđược đặt vào NO. Và sau đó nó hoạt động.


16

Để sử dụng phương pháp UIApplication cũ để ẩn / hiển thị thanh trạng thái, ứng dụng của bạn phải đặt giá trị nguyên cho iOS 7:

View-Controller Based Status Bar Appearance = NO

Giá trị này được đặt thành CÓ theo mặc định. Nếu bạn thay đổi thành KHÔNG, bạn có thể sử dụng các phương pháp cũ. Nếu bạn để nó được đặt thành CÓ, bạn vẫn có thể ẩn thanh trạng thái, nhưng tùy thuộc vào từng lớp con của trình điều khiển chế độ xem trong ứng dụng của bạn để ghi đè: prefersStatusBarHiddenđể trả về CÓ.

Bất cứ khi nào ứng dụng của bạn cần xuất hiện hoặc hiển thị trên thanh trạng thái để thay đổi và Giao diện thanh trạng thái dựa trên bộ điều khiển xem được đặt thành CÓ, bộ điều khiển chế độ xem ngoài cùng của bạn cần gọi:

setNeedsStatusBarAppearanceUpdateAnimation


Tôi đã phải áp dụng trong Thuộc tính mục tiêu tùy chỉnh của iOS, bởi vì trong phần chung chung không hoạt động
xarly

16

Để ẩn thanh trạng thái trong iOS7, bạn cần 2 dòng mã

  1. ứng dụng: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsviết

    [application setStatusBarHidden:YES];
  2. trong info.plist thêm điều này

    View-Controller Based Status Bar Appearance = NO

2
Chỉ cần dọn dẹp cái này, nếu bạn đặt cái này vào trong didFinishLaunching, bạn có thể viết [application setStatusBarHidden:YES];hoặcapplication.statusBarHidden = YES;
joel.d

có thể có một lỗi đánh máy trong câu trả lời ở trên. "Giao diện thanh trạng thái dựa trên bộ điều khiển xem = NO" không hoạt động đối với tôi, nhưng "Xem thanh trạng thái dựa trên bộ điều khiển xuất hiện = NO" đã hoạt động.
tmr

11

Có rất nhiều kết hợp được đề xuất cho vấn đề này, nhưng vấn đề là iOS 6 và 7 sử dụng các phương pháp khác nhau để ẩn thanh trạng thái. Tôi chưa bao giờ thiết lập thành công cài đặt plist để kích hoạt hành vi kiểu iOS6 trên iOS 7, nhưng nếu bạn đang xây dựng ứng dụng của mình để hỗ trợ iOS 6+, bạn cần sử dụng 3 phương pháp cùng một lúc để đảm bảo trình điều khiển chế độ xem cụ thể che giấu trạng thái quán ba:

// 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];
}

Điều này sẽ làm việc bất kể cài đặt plist của bạn.


7

Tôi đã phải thực hiện cả hai thay đổi bên dưới để ẩn thanh trạng thái:

Thêm mã này vào trình điều khiển xem nơi bạn muốn ẩn thanh trạng thái:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Thêm phần này vào tệp .plist của bạn (đi đến 'thông tin' trong cài đặt ứng dụng của bạn)

View controller-based status bar appearance --- NO

Sau đó, bạn có thể gọi dòng này để ẩn thanh trạng thái:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

6

Chỉ cần thêm 2 dòng này vào tập tin info.plist. Nó sẽ thực hiện sửa lỗi cho cả iOS7 và phiên bản cũ hơn.

  • Thanh trạng thái ban đầu bị ẩn = CÓ
  • Xem sự xuất hiện của thanh trạng thái dựa trên bộ điều khiển = NO

Điều hướng đến dự án và chọn Mục tiêu -> Chung và xem hộp kiểm "Kiểu thanh trạng thái ... Ẩn trong khi khởi chạy ứng dụng" sẽ được chọn. Điều này sẽ làm việc.


6

Hãy thử phương pháp đơn giản này:

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

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

4

Điều duy nhất làm việc cho tôi là thêm những điều sau vào phần chính của bạn

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

4

Phương pháp dễ nhất tôi đã tìm thấy cho ẩn thanh trạng thái trong suốt toàn bộ ứng dụng là bằng cách tạo ra một categorytrên UIViewControllervà trọng prefersStatusBarHidden. Bằng cách này, bạn không phải viết phương thức này trong mỗi bộ điều khiển xem đơn.

UIViewControll + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewControll + 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

giải pháp thực tế nhất, iOS7, không giả mạo, tuyệt vời
Fattie

3
  1. Trong plist thêm ----

    Xem sự xuất hiện của thanh trạng thái dựa trên bộ điều khiển --- KHÔNG

  2. Trong mỗi viewControll ghi

    - (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
    }

Đối với sự cố trên thanh trạng thái trong iOS 7 nhưng mục tiêu phải là 5.1 trở lên cho ứng dụng


3

Nhiều câu trả lời trên chủ đề này hoạt động, nhưng đó là sự hiểu biết của tôi nếu bạn đang cố gắng làm bất cứ điều gì năng động, cuối cùng bạn sẽ cần phải gọi:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

3

Các bước để ẩn thanh trạng thái trong iOS 7:

1.Đi tới tập tin thông tin ứng dụng của bạn.

2.And Set, Xem giao diện thanh trạng thái dựa trên bộ điều khiển: Boolean NO

Hy vọng tôi đã giải quyết vấn đề thanh trạng thái .....


3

Đối với iOS 7 trong một chế độ xem, sử dụng trong phương thức viewWillappear:

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

Để hiển thị thanh trạng thái sử dụng:

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


2

Trong tệp Thông tin Plist Thêm một hàng cho thuộc tính sau

Tên thuộc tính: Xem sự xuất hiện của thanh trạng thái dựa trên bộ điều khiển

Giá trị: KHÔNG


1

Hãy thử thêm phương pháp sau vào trình điều khiển xem gốc của ứng dụng:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

1

Tôi đã thử tất cả các tùy chọn được đăng ở đây trong dự án của tôi và chúng sẽ không hoạt động. Tôi nghĩ rằng nó có thể xảy ra với thực tế là tôi đã cập nhật Xcodeứng dụng của mình và sau đó ứng dụng lên iOS 7 và một số cài đặt đã bị rối ở đâu đó. Tôi quyết định xây dựng một dự án hoàn toàn mới cho nó và sau khi chỉ cần thiết lập đơn giản: " Status bar is initially hidden = YES" và "View controller-based status bar appearance = NO " như nhiều người khác đã nói, nó hoạt động chính xác (tức là không có thanh trạng thái).

Vì vậy, lời khuyên của tôi nếu bạn đang làm việc với một dự án đã được cập nhật lên iOS 7 từ một phiên bản cũ và đã thử tất cả các tùy chọn khác là xây dựng một dự án mới.


Tôi đã sử dụng kỹ thuật tương tự này để xác nhận ban đầu rằng tôi có thể ẩn thanh trạng thái trên toàn cầu, cho mọi màn hình, nhưng vì ứng dụng của tôi khá "tập trung thời gian", tôi muốn hiển thị thời gian cho hầu hết các màn hình. Đó chỉ là một màn hình tôi muốn loại trừ nó vì nhiều lý do. Tôi đã kết thúc bằng cách sử dụng ngược lại các tham số của bạn: ban đầu bị ẩn = xuất hiện trên thanh trạng thái dựa trên NO & VC = CÓ. Sau đó, tôi phải đặt phương thức (BOOL) pre preferStatusBarHidden (trả về CÓ) vào một VC mà tôi muốn ẩn nó. Hoạt động độc đáo. Tôi nên thêm rằng ứng dụng của tôi chỉ dành cho iOS7 vì những lý do khác.
bobsmells

1

Cho năm 2019 ...

Để tạo một ứng dụng không có thanh trạng thái,

Nhấp vào info.plist, nhấp chuột phải vào "Thêm hàng".

Thêm hai, với các cài đặt sau:

nhập mô tả hình ảnh ở đây

Thats tất cả để có nó.



0

Dành cho Swift 2.0+ iOS 9

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

0

Để ẩn thanh trạng thái cho viewContoder cụ thể

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Để cài đặt thanh trạng thái Ẩn cho ứng dụng:

  • thiết lập View controller-based status bar appearanceđể NOtrong plist và application: didFinishLaunchingWithOptions:thiết lập: [application setStatusBarHidden:YES];

    Lưu ý: setStatusBarHidden: không dùng nữa

HOẶC LÀ

  • trong Cài đặt dự án -> Tab chung -> Thông tin triển khai

    Đánh dấu vào Hide Status barô.


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

Câu hỏi đề cập rõ ràng rằng phương pháp này không hoạt động. Xin vui lòng, đọc kỹ câu hỏi trước khi trả lời.
Borys Verebskyi

Miễn là giao diện thanh trạng thái dựa trên bộ điều khiển được đặt thành KHÔNG, đó là cách tiếp cận sạch nhất.
Evan Ische

-7

Tôi không chắc tại sao bạn "không thể đăng nhập vào Diễn đàn nhà phát triển của Apple", nhưng (không vi phạm NDA), bạn cũng có thể ẩn statusBar của mình thông qua Xcode. Đây là một cài đặt chung cho mục tiêu ứng dụng của bạn.nhập mô tả hình ảnh ở đây


Không, làm việc như một nét duyên dáng. các diễn đàn đã được một thời gian.
Jake
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.