我试图检测隐藏和显示 iPhone 的 UIStatusBar 但失败了。有什么解决方案可以帮助我,比如 KVO 或其他什么?
问问题
2199 次
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
由于isStatusBarHidden
andsetStatusBarHidden
已从 iOS 13 中弃用,您可以使用 and 来检查状态栏的可见性,UIStatusBarManager.isStatusBarHidden
因为Timer
KVO 不支持它:
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 回答