私がなんとかそれを修正した方法は本当に簡単で、基本的にこれが問題の核心です: ビューを回転させ、NavigationController が新しい位置を再計算すると、ステータスバーが隠れた。その後、ステータスバーとナビゲーションバーの両方を表示すると重なってしまいます。
これを修正する方法は非常に簡単です。オーバーレイを表示するか非表示にするかを覚えておくために BOOL を保持し、ViewController に willRotateToInterfaceOrientation と willAnimateRotationToInterfaceOrientation の両方を実装するだけです。
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (!isOverlayShowing)
{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (!isOverlayShowing)
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
これら 2 つのメソッドで StatusBar をすばやく表示および非表示にすることにより、NavigationBar がその位置を再計算する正確な瞬間に StatusBar が表示されます。これがこの問題を解決するための最良の実装であるかどうかはわかりませんが、これまでのところ、この方法は機能し、画面がちらつくこともなく、非常にスムーズです。