Это может быть немного поздно, но у меня ТОЧНО та же проблема.Я проектировал представление для чтения в полноэкранном режиме с прозрачной строкой состояния, панелью навигации и панелью инструментов, которые можно плавно увеличивать и уменьшать, нажимая в центре экрана.
Мне удалось это исправить.очень просто, в основном суть проблемы, если это: когда вы поворачиваете представление и NavigationController пересчитывает свою новую позицию, он думает, что это должно быть в верхней части окна, потому что строка состояния скрыта.Когда после этого вы показываете и строку состояния, и панель навигации, они перекрываются.
Способ исправить это очень просто, просто сохраните BOOL, чтобы запомнить, отображается ли наложение или скрыто, и реализуйте обаwillRotateToInterfaceOrientation и willAnimateRotationToInterfaceOrientation в вашем ViewController.
- (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];
}
Быстро показывая и скрывая StatusBar в этих двух методах, StatusBar отображается в тот момент, когда NavigationBar пересчитывает свою позицию.Я не знаю, является ли это лучшей реализацией для решения этой проблемы, но пока этот метод работает и не создает мерцания на экране и очень плавный.
Я надеюсь, что кто-то еще с моей проблемой может споткнутьсяна этот пост и найти это простое решение этой проблемы.