在我的iOS视频应用中,状态栏隐藏在一些视图控制器中。我已经使用以下代码做到了这一点。

[[UIApplication sharedApplication] setStatusBarHidden:YES];

它适用于iOS 5和iOS 6,但不适用于iOS 7。 我在特定的视图控制器中尝试了这个,

Eg:

-(BOOL)prefersStatusBarHidden { return YES; }

它工作得很好,但是我不能在父视图控制器中再次显示状态栏。


当前回答

以下是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控制器,或者其他容器视图控制器,你还需要让它在发送childViewControllerForStatusBarHidden时返回你的类。一种方法是为statusController设置一个公共弱变量,并在这个被重写的方法中返回它。

其他回答

要回答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]

固定解决方案SWIFT 3+ (iOS 9, 10)

1-在信息。请在属性下面设置

2-粘贴下面的代码到根控制器,以

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

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

你可以调用isStatusBarHidden = true和isStatusBarHidden = false来隐藏/显示状态栏

你应该将这个值添加到plist: "View controller-based status bar appearance"并将其设置为"NO"。

在Info.plist中添加以下内容:

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

iOS 9起:

由于statusBarHidden方法已从iOS9中弃用,您需要在plist中添加如下两个值:

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

请参考以下图片:

statusBarHidden从iOS9被弃用:

@property(重述,非atomic,getter= isstatus barhiden) BOOL 新闻记者:新闻记者 prefersStatusBarHidden”)__TVOS_PROHIBITED;