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];