1

UITabBarController ベースのアプリケーションがあり、その展開ターゲットは iOS5.1 です (そのため、iOS7 のビュー コントローラー ベースのステータス バーの外観機能は使用していません)。そして、最初のタブのステータスバーを非表示にしたい。最初の起動では正常に動作します (ビューは 431 ポイント = 480 - tabBar の 49 ポイントを取るように引き伸ばされます) が、タブを変更して最初の画面に戻った後、ステータス バーは非表示になりますが、黒い四角形が表示されます。上。

私のコード(AppDelegate +最初のタブViewController):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    application.statusBarHidden = YES;
    return YES;
}

- (void) loadView {
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
    NSLog(@"load View %@", NSStringFromCGRect(self.view.frame));
}  

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"view did load %@", NSStringFromCGRect(self.view.frame));
    ...
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"view willAppear %@", NSStringFromCGRect(self.view.frame));
    ....
}

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"view didAppear %@", NSStringFromCGRect(self.view.frame));
    ....
}

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

- (void) viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    ....
    self.view = nil;
}

そして、ここにトレース出力があります:

ビュー {{0, 0}, {320, 480}} を読み込みます

ビューは {{0, 0}, {320, 480}} をロードしました

ビュー willAppear {{0, 0}, {320, 431}}

ビュー didAppear {{0, 0}, {320, 431}}

ビュー {{0, 0}, {320, 480}} を読み込みます

ビューは {{0, 0}, {320, 480}} をロードしました

ビュー willAppear {{0, 0}, {320, 411}}

ビュー didAppear {{0, 0}, {320, 411}}

viewWillAppear:ログに見られるように、最初のタブ画面に戻ったときに 2 回目にトリガーされると、メソッドのビューの高さからステータス バーの高さが差し引かれます。なぜそれが起こるのですか?どのように修正/バイパスするかについてのアドバイスは大歓迎です!

PS私はすでに[[UIApplication sharedApplication] setStatusBarHidden:YES];すべてのビューコールバック(viewDidLoad、viewWillAppearなど)に挿入しようとしましたが、役に立ちませんでした! また、次のトリックを試してみましたが、うまくいきませんでした。2) [self.view sizeToFit];+[self.view setNeedsLayout];

4

0 に答える 0