Thanh trạng thái sẽ không biến mất


112

Tôi đang tạo một ứng dụng và tôi muốn ẩn thanh trạng thái. Khi tôi kiểm tra ứng dụng, thanh trạng thái bị ẩn trong khi màn hình hiển thị, nhưng sau khi ứng dụng được tải đầy đủ, thanh trạng thái sẽ xuất hiện lại.

Tôi đang sử dụng Xcode 5 và iOS 7 và đã thử tắt thanh trạng thái theo chương trình

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

trong tệp info.plist và sử dụng trình kiểm tra thuộc tính trên tệp .xib. Không có gì xuất hiện để làm việc.

Có ý kiến ​​gì không?

Câu trả lời:


220

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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
Làm thế nào để thực hiện điều này trên toàn cầu?
jjxtra

16
Ngoài ra, như đã nêu trong tài liệu của Apple, bạn nên gọi [self setNeedsStatusBarAppearanceUpdate];phương thức sau khi gọi phương thức này với giá trị khác với giá trị mặc định (giá trị mặc định là KHÔNG).
manderson

3
@PsychoDad Kiểm tra câu trả lời của tôi để có giải pháp toàn cầu hơn.
Idan

2
Hoàn hảo, cảm ơn bạn. Tôi chỉ không thể tìm ra lý do tại sao iOS 7 lại làm điều này và không tôn trọng các XIB không chứa cài đặt thanh trạng thái!
justinhartman,

1
Thêm điều này vào một ViewController được thêm vào ngăn xếp là tất cả những gì tôi cần để ẩn thanh trạng thái trong viewcontroller đó; thanh trạng thái trở lại khi bộ điều khiển chế độ xem này bị xóa.
MacD

126

Bạn nên thêm giá trị này vào plist: " Xem giao diện thanh trạng thái dựa trên bộ điều khiển " và đặt nó thành " KHÔNG ".

Điều này sẽ cho phép bạn đặt thanh trạng thái ở chế độ ẩn . Điều này đặt nó thành một toàn cầu không giống như các câu trả lời được cung cấp khác.

CẬP NHẬT: Nếu bạn muốn thanh trạng thái sẽ bị ẩn trên màn hình giật gân, đừng quên đánh dấu " Ẩn khi khởi chạy ứng dụng " trên các tùy chọn thanh trạng thái mục tiêu. Ngoài ra, bạn có thể thêm " Thanh trạng thái ban đầu bị ẩn " thành " " trên bảng xếp hạng nếu bạn không muốn làm điều đó với mã bên trong ứng dụng.


2
Tôi đã mất rất nhiều thời gian để tìm ra điều này. Đó là một vấn đề mà tôi nghĩ ai cũng sẽ gặp phải và Apple đã không đề cập đến nó đủ. rất vui được giúp đỡ ...
Idan

7
hoạt động tốt, đừng quên đặt giá trị .plist cho "Thanh trạng thái ban đầu bị ẩn" thành CÓ.
andreas-supersmart

1
Chà, đó là thứ duy nhất hoạt động với Kobold2d 2.1.0 và iOS 7, cảm ơn rất nhiều!
Binarian

5
Apple không thực sự là nhà vô địch về khả năng tương thích ngược. Tất cả hãy cùng nhảy theo tiếng sáo của họ và cập nhật từng ứng dụng của chúng tôi. Xin lỗi, trút bực bội. Do Apple gây ra.
Henrik Erlandsson

1
cuối cùng nó hoạt động cho tôi. Bởi vì - (BOOL) ưu tiên phương thức hiển thị không hoạt động trong chế độ xem mô hình.
utkal patel

73

Mã bạn đã đăng hoạt động cho iOS 6.1 trở xuống. Đối với iOS 7, Apple đã cung cấp các phương pháp mới để điều khiển trực tiếp thanh trạng thái cho mỗi chế độ xem. Tắt tùy chọn này trong Info.plist của bạn sẽ cho phép bạn ẩn thanh trạng thái, ít nhất là đối với Bản xem trước dành cho nhà phát triển hiện tại (4).

Thêm cái này và đặt thành KHÔNG

Để tham khảo, vui lòng xem hướng dẫn chuyển đổi iOS 7 có sẵn trên cổng dành cho nhà phát triển của Apple.


3
Theo tôi, câu trả lời này tốt hơn vì trong ứng dụng của tôi, tôi chỉ muốn ẩn thanh trạng thái ở chế độ ngang, cảm ơn!
Son Nguyen,

nhờ điều này giúp tôi kể từ khi tôi muốn giấu nó cho toàn bộ ứng dụng của tôi
kevinl

2
Theo tôi, câu trả lời này nên là câu trả lời tốt nhất -> Nó được giải thích ở đây developer.apple.com/library/prerelease/ios/documentation/...
marceloquinta

5
Tôi đã làm điều này, nhưng có vẻ như nó vừa ẩn thanh trạng thái, tuy nhiên, ứng dụng của tôi vẫn bị 'đẩy xuống' do dung lượng mà thanh trạng thái sẽ chiếm và tôi vẫn có thể thấy chỉ báo pin!
vedran

36

Tôi thử ẩn thanh trạng thái trong tất cả ứng dụng của mình và trong "app" -info.plist và tôi thêm hai hàng trong từ điển "Danh sách thuộc tính thông tin". Tôi thêm "Xem giao diện thanh trạng thái dựa trên bộ điều khiển" đặt KHÔNG và trong " Thanh trạng thái ban đầu bị ẩn "đặt CÓ và đối với tôi hoạt động n_n '

thông tin plist


2
Điều này buộc ứng dụng của bạn ở chế độ tương thích được thiết kế chỉ để làm cho các ứng dụng cũ chạy như dự định trên iOS 7 khi các nhà phát triển không có thời gian để sửa ứng dụng theo cách mới để thực hiện. Thay vào đó, bạn cần triển khai các phương thức prefer * trong bộ điều khiển chế độ xem của mình.
lhunath

17

Tuy nhiên, nếu bạn sử dụng UIImagePicker, thanh trạng thái sẽ xuất hiện trở lại.

Trong trường hợp đó, bạn nên ẩn thanh trạng thái như bên dưới,

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

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

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
Tôi đang gặp vấn đề tương tự. Thanh trạng thái bị ẩn cho đến khi tôi sử dụng UIImagePicker. Tôi đã thử giải pháp của bạn và nó không hiệu quả với tôi. Tôi có cần thêm gì ngoài mã trong bài đăng của bạn không?
Dev01

@WootWoot Tôi cũng đã thêm - (BOOL) prefersStatusBarHidden {return YES; } để xem bộ điều khiển. Hãy thử nó.
alones

dường như không hiệu quả với tôi .. bạn có nên thực sự gọi setNeedsStatusBarAppearanceUpdatekhông?
RyanM

Tôi cần ẩn thanh trạng thái khi nhấp vào nút. Tôi đã thử mã bên dưới nhưng nó không hoạt động. Ai đó có thể vui lòng giúp tôi. [[UIApplication sharedApplication] setStatusBarHidden: YES];
janitheshan

8

Sau một thời gian dài tìm kiếm, cuối cùng tôi đã tìm thấy một giải pháp rất đơn giản cũng giải quyết vấn đề UIImagePickerController vấn đề.

Như đã đề cập trong các câu trả lời khác, hãy đặt thanh trạng thái ẩn trong AppDelegate didFinishLaunching của bạn và đặt "Giao diện thanh trạng thái dựa trên bộ điều khiển của Chế độ xem" thành KHÔNG.

Sau đó, trong AppDelegate của bạn:

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

et voila - Thanh trạng thái của bạn sẽ vẫn bị ẩn ngay cả khi UIImagePickerController là quan trọng nhất.

Điều này tốt hơn là 'rehiding' nó mỗi khi bạn trình bày một UIImagePickerController vì nó vẫn ẩn trong ứng dụng.


2
Mặc dù ít nhất một cái gì đó vẫn có vẻ bị hỏng trong iOS7 trên iPad - UIImagePickerController vẫn hiển thị thanh trạng thái vào lần thứ hai nó được hiển thị ... Hurrrr ... :-( Hiện tại tôi đang sử dụng appDelegate cùng với việc ẩn nó một lần nữa trong mọi chế độ xemWillAppear . vì vậy, ngay cả khi nó trông bẩn cho một đoạn ngắn trong khi nó được cố định lại một cách nhanh chóng.
ikuramedia

1
Đây là phương pháp duy nhất phù hợp với tôi trên iOS8 ... bằng cách nào đó, StatusBarHidden không được gọi trên bộ điều khiển chế độ xem của tôi.
mojuba

7

Để ẩn thanh trạng thái trên một UIViewController cụ thể, chỉ cần thêm điều này:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Hi vọng điêu nay co ich !


!! Đây là giải pháp phù hợp với tôi trong iOS 9.2, việc sửa đổi plist không có tác dụng.
mico

5

Bạn có thể ẩn khỏi bản tóm tắt dự án. có một hộp kiểm ẩn trong khi khởi chạy.

Xem ảnh chụp nhanh

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


4

Tôi tìm thấy giải pháp này cho tôi. Nó hoạt động như một say mê. Viết mã này trên bộ điều khiển chế độ xem của bạn mà bạn muốn sử dụng UIImagePickerController.

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

3

Ngoài câu trả lời từ alones ở trên, hãy đảm bảo triển khai phương thức imagePickerControllerDidCancel và thêm mã tương tự vào đó.


2

Tôi cũng đang gặp sự cố với UIImagePicker. Tương tự như câu trả lời của Một mình, giải pháp của tôi là như sau. Tôi đã thêm dòng hoặc mã này:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

đến chức năng này:

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

Tôi chưa thử nghiệm điều này với iOS 6 trở lên nhưng nó hoạt động tốt trong iOS 7.


2

Giải pháp Swift

chỉ cần thêm cái này vào bộ điều khiển chế độ xem của bạn:

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

0

Tôi đang sử dụng Xcode 6, giải pháp này hoạt động trên iOS 7 và 8 đối với tôi:

Đầu tiên, đặt "Xem giao diện thanh trạng thái dựa trên bộ điều khiển" thành KHÔNG trong tệp plist.

Thứ hai, trong AppDelegate, hãy thêm cái này:

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

0

Vấn đề của tôi là tôi đã sử dụng ngăn điều khiển chế độ xem. Chẳng hạn, chỉ có bộ điều khiển chế độ xem trên cùng, được nhúng vào bộ điều khiển điều hướng, mới có thể ẩn hoặc hiển thị thanh trạng thái.

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.