我正在尝试检测iPhone的UIStatusBar的隐藏和显示但是失败了。是否有任何解决方案可以帮助我,比如KVO或其他什么?
答案 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弃用了isStatusBarHidden
和setStatusBarHidden
,因此您可以使用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)
}
}