首页 文章

如何隐藏iOS状态栏

提问于
浏览
213

在我的iOS视频应用中,状态栏隐藏在某些视图控制器中 . 我使用以下代码完成了此操作 .

[[UIApplication sharedApplication] setStatusBarHidden:YES];
  • 适用于iOS 5和iOS 6,但不适用于iOS 7 .

  • 我在特定的视图控制器中试过这个,

例如:

-(BOOL)prefersStatusBarHidden { return YES; }

它运行良好,但我不能再在父视图控制器中显示状态栏 .

20 回答

  • 5

    从iOS9开始,不推荐使用

    • UIApplication.setStatusBarX

    • 不推荐使用info.plist中的UIViewControllerBasedStatusBarAppearance = NO

    • 所以我们应该在所有视图控制器中使用preferredStatusBarX

    但是当涉及到UINavigationController时它会变得更有趣:

    • 如果navigationBarHidden = true,则调用子UIViewController的preferredStatusBarX,因为子节点正在状态栏下显示内容 .

    • 如果navigationBarHidden = false,则调用UINavigationController的preferredStatusBarX,毕竟它在状态栏下显示内容 .

    • UINavigationController的默认preferredStatusBarStyle使用UINav.navigationBar.barStyle中的值 . .Default =黑色状态栏内容,.Black =白色状态栏内容 .

    • 因此,如果您在设置barTintColor之前将barStyle设置为黑色,以防barStyle覆盖barTintColor .

    • 另一种方法是你可以继承UINavigationController,而不是使用bar样式 .

    • 但是,如果你是UINavigationController的子类,如果navigationBarHidden = true,则无法控制状态栏 . 不知怎的,UIKit直接转到子UIViewController而没有在这种情况下询问UINavigationController . 我本以为应该是UINavigationController要求孩子> shrugs < .

    • 如果modalPresentationStyle = .FullScreen,模态显示的UIViewController只会在状态栏中显示 .

    • 如果您有自定义演示样式模式视图控制器并且您确实希望它控制状态栏,则可以设置modalPresentationCapturesStatusBarAppearance = true .

  • 111

    您应该将此值添加到plist:“ View controller-based status bar appearance " and set it to " NO ” .

    enter image description here

  • 33

    将以下内容添加到Info.plist中:

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

    Image

  • 14

    在viewdidload中添加以下行

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

    并添加新方法

    - (BOOL)prefersStatusBarHidden {
              return YES;
      }
    

    还要更改info.plist文件查看基于控制器的状态栏外观“=否

    它适合我

  • 274

    在Plist中添加以下属性 .

    Status bar is initially hidden = YES
    
    View controller-based status bar appearance = NO
    

    现在状态栏将隐藏 .

  • 4

    试试这个简单的方法:


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

    斯威夫特:

    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)
    }
    
  • 2

    我做了以下操作,它似乎工作(即使在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;
    }
    
  • 186

    要在iOS7中隐藏状态栏,您需要2行代码

    • 在应用程序中:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions写
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    

    在info.plist中

    • 添加此内容
    View-Controller Based Status Bar Appearance = NO
    
  • 9

    为了更好地理解,请添加一些评论照片:

    应用之前的任何变化

    enter image description here

    找到名为 Supporting FilesProject Navigator 文件夹,然后单击* .plist文件

    enter image description here

    在您获得应用程序的不同设置后显示 . 您需要添加2个键 UIStatusBarHiddenUIViewControllerBasedStatusBarAppearance . 您只需单击按钮即可完成此操作

    enter image description here

    按下后,您可以选择其中一个键 - 只需开始键入 .

    正确版本:

    enter image description here

    最后应用此更改后的应用程序:

    enter image description here

    此外,你可以找到替代解决方案here

  • 5

    试试吧;

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

    在iOS10中,我需要做的是覆盖 RootViewController (Swift)中的 prefersStatusBarHidden var:

    override var prefersStatusBarHidden: Bool {
        return true
    }
    
  • 7

    要在iOS7中隐藏状态栏:

    打开plist文件,然后添加一行名为 "View controller-based status bar appearance" 的行并将其值设置为 NO .

  • 7

    这是Swift版本(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)
    }
    

    这也有效(iOS7):

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

    你还需要打电话:

    setNeedsStatusBarAppearanceUpdate()
    

    比方说 viewDidLoad() .

    请注意,如果您使用SplitView控制器或其他一些 container 视图控制器,则还需要在发送 childViewControllerForStatusBarHidden 时返回您的类 . 一种方法是使用公共弱变量 statusController ,并在此重写方法中返回它 .

  • 27

    您应该将此值添加到plist:“查看基于控制器的状态栏外观”并将其设置为“NO” .

  • 4

    Steps for hide status bar in iOS
    1.打开 AppDelegate.m 文件,在didFinishLaunchingWithOptions中添加application.statusBarHidden方法

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        application.statusBarHidden = YES;
        return YES;
        }
    
    • 打开 info.plist 并设置

    View controller-based status bar appearance 设置 NO

  • 4

    iOS 9 onwards :

    由于 statusBarHidden 方法是 Deprecated 来自 iOS9 ,您需要在plist中添加两个值,如下所示:

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

    或者通过用户界面请在图片下方重新显示:

    enter image description here

    statusBarHiddenDeprecated 来自 iOS9

    @property(readwrite,nonatomic,getter = isStatusBarHidden)BOOL statusBarHidden NS_DEPRECATED_IOS(2_0,9_0,“Use - [UIViewController prefersStatusBarHidden]”)__ TVOS_PROHIBITED;

  • 1

    FIXED SOLUTION FOR SWIFT 3+ (iOS 9, 10)

    1-在info.plist下面设置属性

    enter image description here

    2-将代码粘贴到根控制器,To

    private var isStatusBarHidden = true {
            didSet {
                setNeedsStatusBarAppearanceUpdate()
            }
        }
    
        override var prefersStatusBarHidden: Bool {
            return isStatusBarHidden
        }
    

    您可以在 hide/showisStatusBarHidden = false 状态栏中调用 isStatusBarHidden = trueisStatusBarHidden = false

  • 12

    来自 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);
    

    所以应该将 View controller-based status bar appearance 设置为NO

  • 4

    要回答Susitha的问题:使用 setNeedsStatusBarAppearanceUpdate . 这将调用prefersStatusBarHidden来刷新所需的状态栏状态 . 试试这个:

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

    如果要再次查看状态栏,请将属性hideStatusBar(或其他任何名称)设置为NO . 通过再次调用来间接调用preferStatusBarHidden

    [self setNeedsStatusBarAppearanceUpdate]
    
  • 2

    Swift 3更新:

    使用以下信息更新Info.plist:

    View controller-based status bar appearance: NO

    然后,在ViewController或其他地方:

    UIApplication.shared.isStatusBarHidden = true

相关问题