状态栏框架更改,没有任何通知

pro*_*rmr 10 nsnotificationcenter ios uistatusbar

我已注册接收有关状态栏框架更改的通知,但从未收到过.

以下是我注册通知的方式:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(appWillChangeStatusBarFrameNotification:)
                                             name:UIApplicationWillChangeStatusBarFrameNotification
                                           object:nil];
Run Code Online (Sandbox Code Playgroud)

在我们的应用程序的某些地方,我们显示/隐藏状态栏:

[[UIApplication sharedApplication] setStatusBarHidden:maximize
                                        withAnimation:UIStatusBarAnimationSlide];
Run Code Online (Sandbox Code Playgroud)

但是,当启用个人热点或拨打电话时,它也可以改变大小.有没有办法在它改变时获得实际的状态栏框架?

这个问题意味着由于SDK错误而导致通知不起作用,至少对于方向更改而言.这是什么原因?有没有解决方法?

Mr.*_*. T 7

我知道这个问题已经发布了一段时间,但这个问题很烦人!在UIApplicationWillChangeStatusBarFrameNotificationUIApplicationDidChangeStatusBarFrameNotification通知仅与姿态变化火灾和通话中的状态栏高度的变化.

我通过编写自己的setStatusBarHidden类别函数来解决这个问题,而不是使用普通UIApplication函数.不幸的是(正如@progrmr指出的那样),因为状态栏的高度可能是20像素或40像素(而且我们不知道隐藏状态栏的框架在被取消隐藏之后会变成什么样),我们只能可靠地开火具有正确userInfo(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
Run Code Online (Sandbox Code Playgroud)

它有点hacky,但我喜欢它,因为我可以使用相同的通知观察器来监听呼叫状态栏框架更改和我的手动setStatusBarHidden框架更改.

希望这有助于某人!