在按钮上隐藏状态栏Swift 3 / iOS 10

时间:2017-03-13 10:13:13

标签: ios uiviewcontroller swift3 uibutton

按下按钮时,我似乎无法隐藏根视图控制器(A)中的状态栏。

我已将info.plist Status bar is initially hiddenView controller-based status bar appearance中的属性设置为YES

如果我实施override var prefersStatusBarHidden: Bool { get },状态栏将被明确隐藏(或不显示)。

我需要什么

我希望状态栏显示在(A)中,但是当我按下一个将子视图控制器添加到(A)的按钮时隐藏状态栏。

我已尝试将prefersStatusBarHidden设置为false,并在按下按钮时使用UIApplication.shared.isStatusBarHidden = true将其隐藏,但这不起作用。

肯定有一些我错了,有人可以开导我吗?

提前致谢。

PS:我只需要它是隐形的,不一定是“隐藏”在Swift意义上。

3 个答案:

答案 0 :(得分:12)

隐藏状态栏

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

要恢复状态栏

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 

答案 1 :(得分:0)

您可以创建一个变量来保存一个布尔值来设置状态栏是否隐藏

var _isStatusBarHidden: Bool = false

然后创建其getter和setter

var isStatusBarHidden: Bool {
    get{
        return _isStatusBarHidden
    }
    set {
        if _isStatusBarHidden != newValue {
            _isStatusBarHidden = newValue
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
}

您必须覆盖prefersStatusBarHidden属性

override var prefersStatusBarHidden: Bool {
    return self._isStatusBarHidden
}

最后一件事是当用户按下按钮时将变量设置为true

self.isStatusBarHidden = true

答案 2 :(得分:0)

@Alexandre Lara的代码略有改进:

var isStatusBarHidden: Bool = false {
    didSet {
        if oldValue != self.isStatusBarHidden {
            self.setNeedsStatusBarAppearanceUpdate()
        }
    }
}

override var prefersStatusBarHidden: Bool {
    return self.isStatusBarHidden
}