【问题标题】:How to hide the status bar programmatically in iOS 7?如何在 iOS 7 中以编程方式隐藏状态栏?
【发布时间】:2013-10-04 18:18:13
【问题描述】:

中,如何以编程方式隐藏?我正在使用XCode 4.6.1 (),我想在 XCode 本身中实现它。

【问题讨论】:

    标签: ios7 statusbar ios6.1 iphone ios7 hide statusbar ios6.1


    【解决方案1】:

    在 iOS7 中你应该在你的 viewController 中实现

    - (BOOL)prefersStatusBarHidden {
        return YES;
    }
    

    【讨论】:

      【解决方案2】:

      您可以隐藏状态栏以在plist中设置键值“查看基于控制器的状态栏外观”NO。这是最简单的方法。

      或者您可以使用 UIApplication 类的属性 statusBarHidden 在代码中隐藏。

      [[UIApplication sharedApplication] setStatusBarHidden:YES];
      

      Swift 3.0

      隐藏任何特定视图控制器的状态栏

      override var prefersStatusBarHidden: Bool {
          get {
              return true
          }
      }
      

      在整个应用程序中隐藏状态

      UIApplication.shared.isStatusBarHidden = true

      并在项目的info plist中设置键值“查看基于控制器的状态栏外观”NO。

      【讨论】:

      • 这在 iOS 7 上不起作用。正确答案是 @user2826529
      • 为我工作。确保您正确设置了他在 plist 中提到的属性。
      • 最好的解决方案。忘记上面所有的东西。苹果让它变得太复杂了。
      • 覆盖代码在 iOS 13、Xcode 11.3、Swift 5 中完美运行。 UIApplication.shared.isStatusBarHidden 已弃用。
      【解决方案3】:
      - (void)viewDidLoad
      {
          [super viewDidLoad];
          if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
          {
              [self prefersStatusBarHidden];
              [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
          }
          else
          {
              // iOS 6
              [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
          }
      }
      
      // Add this method
      - (BOOL)prefersStatusBarHidden {
          return YES;
      }
      

      【讨论】:

      • 它对我不起作用。我也用过这个,但总是显示状态栏。请帮忙..
      • [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];这将起作用,并且 info.plist 中有一个属性,您可以在其中隐藏状态栏。
      • 隐藏状态栏后,如何再次显示?因为我想以编程方式更改状态栏的可见状态。
      • 不需要执行选择器。
      • @AndrasHatvani 使用 Xcode 4 指定的问题,这意味着他没有 iOS 7 API。他使用 performSelector 来避免“找不到方法”警告。
      【解决方案4】:

      View controller-based status bar appearance 设置为NO 时隐藏特定的ViewController(然后重新打开):

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

      【讨论】:

        【解决方案5】:

        如果您需要在给定的视图控制器上动态隐藏/显示它,您可以这样做。

        (尽管如果您不需要更改,我建议只使用- (BOOL)prefersStatusBarHidden 来返回您的偏好。)

        // view controller header 
        @interface MyViewController : UIViewController  {
            BOOL shouldHideStatusBar;
        }
        @end
        
        
        @implementation
        
        - (BOOL)prefersStatusBarHidden {
            return shouldHideStatusBar; // backed by your instance variable
        }
        
        - (void)setPrefersStatusBarHidden:(BOOL)hidden {
            shouldHideStatusBar = hidden;
        
            // Don't call this on iOS 6 or it will crash since the 
            // `setNeedsStatusBarAppearanceUpdate` method doesn't exist
            [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
        
            // [self setNeedsStatusBarAppearanceUpdate]; // (if Xcode 5, use this)
        }
        
        @end
        

        【讨论】:

          【解决方案6】:

          如果是 iOS >= 7.0,请使用以下代码:

          语法:

          // Present in UIViewController of UIKit Frameworks
          - (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0); // Defaults to NO
          

          用法:

          - (BOOL)prefersStatusBarHidden {
              return YES;
          }
          

          在 iOS

          语法:

          // Present in UIApplication of UIKit Frameworks
          - (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation NS_AVAILABLE_IOS(3_2);
          

          用法:

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

          【讨论】:

            【解决方案7】:

            斯威夫特 4.1

            step1.info.plist 中的View controller-based status bar appearance 设置为YES

            step2.UIViewController 中输入一些代码,当您显示UIViewController 时,状态栏将隐藏。

            private var statusBarIsHidden = false
            
            override func viewWillAppear(_ animated: Bool) {
                super.viewWillAppear(animated)
            
                statusBarIsHidden = true
                setNeedsStatusBarAppearanceUpdate()
            }
            override var prefersStatusBarHidden: Bool {
                return statusBarStatus
            }
            

            【讨论】:

              【解决方案8】:

              试试这个

              [[UIApplication sharedApplication] setStatusBarHidden:YES];
              

              【讨论】:

                【解决方案9】:

                如果有人想要最新的方法(Swift 2.1 和最新的 Xcode 7.2)

                1. 在 info.plist 中将“基于视图控制器的状态栏外观设置为 NO”

                2. UIApplication.sharedApplication().statusBarHidden = true // 将应用程序委托放入某处(applicationWill 或 DidFinishLaunchingWithOptions:

                【讨论】:

                  【解决方案10】:

                  我的经验是,iOS 9 / Xcode 7.3 中的 info.plist 文件中的代码和值都需要。

                  将此添加到您的 viewDidLoad 方法中。

                  [[UIApplication sharedApplication] setStatusBarHidden:YES];
                  

                  将此作为布尔值添加到您的 info.plist 文件中并将其设置为 NO:

                  View controller-based status bar appearance
                  

                  【讨论】:

                    【解决方案11】:

                    如果使用 iOS 9.0+ 和 Swift。如果您想在某些视图控制器中隐藏状态栏,但不是全部 - 请确保将 Info.plist 中的 View controller-based status bar appearance 值设置为 YES 否则将在所有视图控制器中使用相同的参数。

                    并在UIViewController 的子类中覆盖prefersStatusBarHidden

                    override var prefersStatusBarHidden: Bool {
                        get {
                            return true
                        }
                    }
                    

                    类似的可以改变preferredStatusBarStyle

                    override var preferredStatusBarStyle: UIStatusBarStyle {
                        get {
                            return .lightContent
                        }
                    }
                    

                    【讨论】:

                      【解决方案12】:

                      在 Swift 4 上:

                          UIApplication.shared.isStatusBarHidden = ..true/false
                      

                      【讨论】:

                      • “isStatusBarHidden”的设置器在 iOS 9.0 中已弃用:使用 -[UIViewController prefersStatusBarHidden]
                      猜你喜欢
                      • 2015-07-28
                      • 2013-11-18
                      • 2020-01-27
                      • 1970-01-01
                      • 1970-01-01
                      • 2023-04-04
                      • 2014-02-20
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多