Cách ẩn thanh trạng thái iOS


219

Trong thanh trạng thái ứng dụng video iOS của tôi bị ẩn trong một số bộ điều khiển xem. Tôi đã làm điều này bằng cách sử dụng mã sau đây.

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • Nó hoạt động cho iOS 5 và iOS 6, nhưng không hoạt động trong iOS 7.

  • Tôi đã thử với điều này trong bộ điều khiển xem cụ thể,

Ví dụ:

-(BOOL)prefersStatusBarHidden { return YES; }

Nó hoạt động tốt, nhưng tôi không thể hiển thị lại thanh trạng thái trong trình điều khiển xem cha.



1
Nếu kiểu thanh trạng thái được đặt trong Bảng phân cảnh, sau khi thay đổi "Thanh trạng thái dựa trên bộ điều khiển" (bên dưới), kiểu có thể phải được đặt trong bảng vì cài đặt bộ điều khiển chế độ xem sẽ không còn được sử dụng. stackoverflow.com/questions/18924345/ Mạnh
Matt

1
Tôi đã trả lời trong một câu hỏi khác. Thử cái này. [cách dễ nhất để ẩn thanh trạng thái theo chương trình] [1] [1]: stackoverflow.com/a/27339754/3718498
wataru

1
Tôi đã sử dụng một mẹo cho nó - Tôi đã xuất bản nó dưới dạng pod cocoapods.org/pods/UIViewControll+ODStatusBar , tôi hy vọng nó sẽ hữu ích cho bất kỳ ai
Alex Nazarsky

Các câu trả lời ở đây đã bị phản đối. Tôi đã có khó khăn khi tìm câu trả lời đúng cho iOS 9 khi ẩn thanh trạng thái CHO JUST THE LAUNCH SCREEN , vì vậy liên kết dưới đây do đó, nó hy vọng dễ dàng hơn cho những người khác để tìm cách làm điều đó: stackoverflow.com/questions/34413848/...
Ben

Câu trả lời:


277

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

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


40
Để tham khảo, khóa thô làUIViewControllerBasedStatusBarAppearance
William Denniss

1
@ Rajneesh071 Tôi cần làm gì nếu tôi muốn đặt ưu tiênStatusBarStyle cho công việc tôi cần "View controller-based status bar appearance" set it to "YES".?
Bimawa


bạn đang gặp vấn đề gì
Rajneesh071

dường như không được dùng nữa, sẽ phá vỡ ứng dụng của bạn
Ben

194

Thêm phần sau vào Info.plist của bạn:

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

Hình ảnh


Hoạt động tuyệt vời trong Xcode 11.3, iOS 13
Wayne Henderson

113

Thêm dòng sau trong viewdidload

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

và thêm phương thức mới

  - (BOOL)prefersStatusBarHidden {
          return YES;
  }

đồng thời thay đổi tập tin info.plist Xem thanh trạng thái dựa trên bộ điều khiển "= NO

nó làm việc cho tôi


Thanx này làm việc cho tôi nhưng tôi cần thêm hàng dưới đây trong plist cũng. "Xem giao diện thanh trạng thái dựa trên bộ điều khiển" = NO i, e Thêm dòng sau vào viewdidload [[UIApplication sharedApplication] setStatusBarHidden: YES withAnimation: UIStatusBarAnimationFade]; và thêm phương thức mới - (BOOL) thíchStatusBarHidden {return YES; } Add "Xem bộ điều khiển dựa trên thanh trạng thái xuất hiện" = NO trong file Plist
cát

prefersStatusBarHiddenlà những gì đã lừa tôi (cho dù với giải pháp này với những người tương tự khác)
Abdo

34

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

Status bar is initially hidden = YES

View controller-based status bar appearance = NO

bây giờ thanh trạng thái sẽ ẩn.


8
Các khóa thô sẽ là UIStatusBarHidden và UIViewControllBasingStatusBarAppparent
leolobato

27

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


Mục tiêu-C:

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

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

Nhanh:

override func viewWillAppear(animated: Bool) 
{
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) 
{
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

1
Đây là một câu trả lời tuyệt vời! Ngoài ra hãy thử nó với các UIStatusBarAnimations khác nhau , chúng khá tuyệt.
VedTopkar

Đừng quên [super viewWillAppear:animated][super viewWillDisappear:animated]
SamB

1
Giải pháp đơn giản này hiệu quả với tôi iOS 10. Cách trở thành người đàn ông đơn giản!
coolcool1994

14

Tôi đã làm như sau và nó dường như hoạt động (ngay cả trong iOS 8):

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }
}

- (BOOL)prefersStatusBarHidden {
    return YES;
}

12
  • UIApplication.setStatusBarX không được dùng nữa kể từ iOS9
  • Sẽ không được chấp nhận khi có UIViewControllBasingStatusBarAppparent = NO trong thông tin của bạn.plist
  • Vì vậy, chúng ta nên sử dụng preferStatusBarX trong tất cả các bộ điều khiển xem của chúng tôi

Nhưng nó trở nên thú vị hơn khi có một UINavestionControll tham gia:

  • Nếu navigationBarHidden = true, thìStStususBarX của UIViewContoder được gọi, vì đứa trẻ đang hiển thị nội dung dưới thanh trạng thái.
  • Nếu navigationBarHidden = false, thìStStususBarX của UINavestionContaptor được gọi, sau khi tất cả nó sẽ hiển thị nội dung dưới thanh trạng thái.
  • Ưu tiên mặc định của UINavestionControllStatusBarStyle sử dụng giá trị từ UINav.navlationBar.barStyle. .Default = nội dung thanh trạng thái màu đen, .Black = nội dung thanh trạng thái màu trắng.
  • Vì vậy, nếu bạn đang đặt barTintColor thành một số màu tùy chỉnh (có thể là màu của bạn), bạn cũng cần đặt barStyle thành .Black để có được nội dung thanh trạng thái màu trắng. Tôi đã đặt barStyle thành màu đen trước khi đặt barTintColor, trong trường hợp barStyle ghi đè lên barTintColor.
  • Một cách khác là bạn có thể phân lớp UINavestionControll thay vì mucking xung quanh với kiểu thanh.
  • TUY NHIÊN, nếu bạn phân lớp UINavestionControll, bạn không có quyền kiểm soát thanh trạng thái nếu navigationBarHidden = true. Bằng cách nào đó, UIKit trực tiếp đến UIViewContoder con mà không hỏi UINavestionControll trong tình huống này. Tôi đã nghĩ rằng trách nhiệm của UINavestionControll là yêu cầu đứa trẻ> nhún vai <.
  • Và UIViewControll hiển thị một cách vừa phải chỉ có tiếng nói trong thanh trạng thái nếu modalPftimeationStyle = .ullScreen.
  • Nếu bạn đã có bộ điều khiển chế độ xem kiểu chế độ trình bày tùy chỉnh và bạn thực sự muốn nó điều khiển thanh trạng thái, bạn có thể đặt modalPftimeationCapturesStatusBarAppparent = true.

Tại sao táo không thể làm theo một lời khuyên? Nếu nó không bị hỏng, đừng sửa nó!
Jargen89

9

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

  1. trong ứng dụng: (ứng dụng UIApplication *) didFinishLaunchingWithOptions: (NSDipedia *) launchOptions viết

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

     View-Controller Based Status Bar Appearance = NO
    

8

Để hiểu rõ hơn, thêm một số hình ảnh với ý kiến:

Ứng dụng trước mọi thay đổi

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

Tìm thấy trong Project Navigatorthư mục của bạn có tên Supporting Filesvà nhấp vào tệp * .plist

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

Sau khi bạn sẽ nhận được cài đặt khác nhau của ứng dụng của bạn hiển thị. Bạn cần thêm 2 phím UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance. Bạn có thể làm điều này chỉ cần nhấp vào nút +

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

Sau khi nhấn + bạn có thể chọn một trong các phím - chỉ cần bắt đầu nhập.

Phiên bản chính xác:

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

Và cuối cùng là ứng dụng sau khi áp dụng thay đổi này:

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

Ngoài ra, bạn có thể tìm giải pháp thay thế ở đây


8

Trong iOS10, tất cả những gì tôi cần làm là ghi đè prefersStatusBarHiddenvar trong RootViewController(Swift):

override var prefersStatusBarHidden: Bool {
    return true
}

7

Hãy thử điều đó;

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

Tuyệt quá. Tôi đã có thể sử dụng điều này để ẩn thanh trạng thái trên trình điều khiển chế độ xem không cần thiết sau đó bỏ ẩn nó sau khi người dùng đăng nhập.
LondonGuy

5

Để ẩn thanh trạng thái của bạn trong iOS7:

Mở tệp plist của bạn, sau đó thêm một hàng có tên "Xem giao diện thanh trạng thái dựa trên bộ điều khiển" và đặt giá trị của nó thành NO.


5

Đây là phiên bản Swift (trước iOS9):

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
}

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
}

Điều này cũng hoạt động (iOS7 +):

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

Bạn cũng cần gọi:

setNeedsStatusBarAppearanceUpdate()

trong tiếng nói viewDidLoad().

Lưu ý rằng nếu bạn sử dụng bộ điều khiển SplitView hoặc một số containerbộ điều khiển xem khác , bạn cũng cần yêu cầu nó trả về lớp của bạn khi nó được gửi childViewControllerForStatusBarHidden. Một cách để làm điều này là có một var yếu công khai để nói statusControllervà trả nó trong phương thức ghi đè này.


1
Khối trên cùng không được chấp nhận trong iOS8 - sử dụng phương pháp thứ hai của bạn. Và cảm ơn! Tôi chỉnh sửa mã để thêm một cuộc gọi bắt buộc khác.
David H

5

iOS 9 trở đi:

statusBarHiddenphương pháp không được chấp nhận từ iOS9, bạn cần thêm hai giá trị theo nguyên tắc như sau:

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

hoặc bằng giao diện người dùng Vui lòng chỉnh lại hình ảnh bên dưới:

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

Như statusBarHiddenbị phản đối từ iOS9 :

@property (đọc-ghi, nonatomic, getter = isStatusBarHidden) BOOL statusBarHidden NS_ NỮA _IOS (2_0, 9_0 , "Sử dụng - [UIViewController prefersStatusBarHidden]") __TVOS_PROHIBITED;


5

GIẢI PHÁP CỐ ĐỊNH CHO SWift 3+ (iOS 9, 10)

1- Trong info.plist đặt bên dưới tài sản

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

2- Dán mã dưới đây vào Root control, To

 private var isStatusBarHidden = true {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

Bạn có thể gọi isStatusBarHidden = trueisStatusBarHidden = falsenơi bạn muốn hide/showthanh trạng thái


4

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


4

Các bước để ẩn thanh trạng thái trong iOS
1. mở tệp AppDelegate.m , thêm application.statusBarHidden trong phương thức didFinishLaunchingWithOptions

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    application.statusBarHidden = YES;
    return YES;
    }
  1. mở thông tin.plist và thiết lập

View controller-based status bar appearance bộ NO


4

Swift 5

Sử dụng các bước sau để ẩn Thanh trạng thái iOS:

  1. Mở trên Info.plist.
  2. Thêm khóa mới Xem giao diện và giá trị của thanh trạng thái dựa trên bộ điều khiển được đặt thành NO .
  3. Thêm khóa mới Thanh trạng thái ban đầu bị ẩn và giá trị được đặt thành .
  4. Biên soạn lại dự án.
  5. Thanh trạng thái nên được ẩn trên điện thoại iOS ngay bây giờ.

Cài đặt cuối cùng Ảnh chụp màn hình:

Cài đặt cuối cùng

Điều này đang hoạt động trên Xcode 10.2


2

Từ UIKit> UIApplication.h:

// Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
@property(nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden;
- (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);

Vì vậy, nên đặt View controller-based status bar appearancethành KHÔNG


2

Để trả lời câu hỏi của Susitha: sử dụng setNeedStatusBarAppparentUpdate . Điều này sẽ thực hiện một cuộc gọi đến prelikeStatusBarHidden để làm mới với trạng thái thanh trạng thái mong muốn của bạn. Thử cái này:

    @property (nonatomic, getter=isHideStatusBar) BOOL hideStatusBar; // Give this a default value early

    - (BOOL)prefersStatusBarHidden {
        return self.isHideStatusBar;
    }

    - (void)someMethod {
    // triggered by an event or user action
    [self setHideStatusBar:YES];
    [self setNeedsStatusBarAppearanceUpdate];
    }

Nếu bạn muốn xem lại thanh trạng thái, hãy đặt thuộc tính của bạn là ẩnStatusBar (hoặc bất cứ thứ gì bạn gọi nó) thành KHÔNG. Gọi preferStatusBarHidden gián tiếp bằng cách thực hiện một cuộc gọi khác đến

[self setNeedsStatusBarAppearanceUpdate]

1

Cập nhật cho Swift 3:

Cập nhật Info.plist với thông tin sau:

View controller-based status bar appearance: NO

Sau đó, trong ViewContoder hoặc các nơi khác:

UIApplication.shared.isStatusBarHidden = true

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.