我已注册接收有关状态栏框架更改的通知,但从未收到。
这是我注册通知的方式:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(appWillChangeStatusBarFrameNotification:)
name:UIApplicationWillChangeStatusBarFrameNotification
object:nil];
在我们应用的某些地方,我们通过以下方式显示/隐藏状态栏:
[[UIApplication sharedApplication] setStatusBarHidden:maximize
withAnimation:UIStatusBarAnimationSlide];
但它也可以在启用个人热点或打电话时改变大小。有什么方法可以在更改时获取实际的状态栏框架?
This question暗示通知由于 SDK 错误而不起作用,至少对于方向更改而言。是这个原因吗?有什么解决方法吗?
最佳答案
我知道这个问题是前一段时间发布的,但这个问题很烦人! UIApplicationWillChangeStatusBarFrameNotification
和 UIApplicationDidChangeStatusBarFrameNotification
通知仅在方向更改和通话状态栏高度更改时触发。
我通过编写自己的 setStatusBarHidden 类别函数来解决这个问题,我使用它来代替普通的 UIApplication
函数。不幸的是(正如@progrmr 指出的那样),因为状态栏的高度可能是 20 像素或 40 像素(而且我们不知道隐藏状态栏的框架在取消隐藏之后会变成什么),我们只能可靠地触发带有正确用户信息的单个通知 (UIApplicationDidChangeStatusBarFrameNotification
)。这是我所做的:
@implementation UIApplication (statusBar)
- (void)setStatusBarHiddenWithNotification:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation
{
if (self.statusBarHidden == hidden) return;
[self setStatusBarHidden:hidden withAnimation:animation];
[NSNotificationCenter.defaultCenter postNotificationName:UIApplicationDidChangeStatusBarFrameNotification
object:nil
userInfo:@{UIApplicationStatusBarFrameUserInfoKey: [NSValue valueWithCGRect:self.statusBarFrame]}];
}
@end
它有点 hacky,但我喜欢它,因为我可以使用同一个通知观察器来监听通话状态栏框架变化和我的手动 setStatusBarHidden 框架变化。
希望这对某人有帮助!
关于ios - 状态栏边框变化无任何通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12773184/