如何检测UIStatusBar隐藏和显示?

时间:2012-10-11 04:15:51

标签: iphone ios uiapplication

我正在尝试检测iPhone的UIStatusBar的隐藏和显示但是失败了。是否有任何解决方案可以帮助我,比如KVO或其他什么?

4 个答案:

答案 0 :(得分:5)

您可以观察共享statusBarHidden实例的UIApplication属性。

简单示例:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    // Do something here...
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[UIApplication sharedApplication] addObserver:self forKeyPath:@"statusBarHidden" options:NSKeyValueObservingOptionNew context:NULL];
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; // Will notify the observer about the change
}

答案 1 :(得分:1)

在iOS 11及更高版本中,您可以将视图控制器的UIView子类化,并覆盖safeAreaInsetsDidChange

override func safeAreaInsetsDidChange() {
  super.safeAreaInsetsDidChange()
  // adapt your view
}

您的视图必须与状态栏共享顶部矩形,此功能才能起作用。 (但是,如果没有,您可能根本不需要检测更改)。

答案 2 :(得分:0)

在UIApplication类中有一个属性statusBarHidden ...这告诉状态栏是否隐藏...如果它返回YES意味着状态栏被隐藏...试试这个。

答案 3 :(得分:0)

iOS 13

由于iOS 13弃用了isStatusBarHiddensetStatusBarHidden,因此您可以使用UIStatusBarManager.isStatusBarHiddenTimer检查状态栏的可见性,因为KVO不支持它:

timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { timer in
    if let statusBarManager = UIApplication.shared.delegate?.window??.windowScene?.statusBarManager {
        print(statusBarManager.isStatusBarHidden)
    }
}