6

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

4

4 回答 4

4

您可以观察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
}
于 2012-10-11T04:23:52.740 回答
1

从 iOS 11 起,您可以继承视图控制器的 UIView 并覆盖safeAreaInsetsDidChange

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

您的视图必须与状态栏共享顶部矩形才能正常工作。(但如果没有,您可能无论如何都不需要检测更改)。

于 2018-11-14T17:26:48.900 回答
0

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

于 2012-10-11T04:23:42.337 回答
-1

iOS 13

由于isStatusBarHiddenandsetStatusBarHidden已从 iOS 13 中弃用,您可以使用 and 来检查状态栏的可见性,UIStatusBarManager.isStatusBarHidden因为TimerKVO 不支持它:

timer = Timer.scheduledTimer(withTimeInterval: 0.3, repeats: true) { timer in
    if let statusBarManager = UIApplication.shared.delegate?.window??.windowScene?.statusBarManager {
        print(statusBarManager.isStatusBarHidden)
    }
}
于 2020-12-14T13:15:23.150 回答