10

ステータス バー フレームの変更に関する通知を受け取るように登録しましたが、受信されません。

通知を登録する方法は次のとおりです。

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(appWillChangeStatusBarFrameNotification:)
                                             name:UIApplicationWillChangeStatusBarFrameNotification
                                           object:nil];

アプリのいくつかの場所で、ステータス バーを次のように表示/非表示にします。

[[UIApplication sharedApplication] setStatusBarHidden:maximize
                                        withAnimation:UIStatusBarAnimationSlide];

ただし、パーソナル ホットスポットが有効になっているときや通話中にサイズが変わることもあります。変更時に実際のステータス バー フレームを取得する方法はありますか?

この質問は、SDK のバグが原因で、少なくとも方向の変更について通知が機能しないことを意味します。それが理由ですか?回避策はありますか?

4

1 に答える 1

7

この質問がしばらく前に投稿されたことは知っていますが、この問題は厄介なものです! UIApplicationWillChangeStatusBarFrameNotificationとのUIApplicationDidChangeStatusBarFrameNotification通知は、向きが変化し、通話中のステータス バーの高さが変化した場合にのみ発生します。

通常の関数の代わりに使用する独自の 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

少しハックですが、同じ通知オブザーバーを使用して、通話中のステータス バー フレームの変更と手動での setStatusBarHidden フレームの変更の両方をリッスンできるため、気に入っています。

これが誰かを助けることを願っています!

于 2013-06-27T18:06:40.517 に答える