Как скрытие UIStatusBar относится к отображаемым UIViews?
-
05-07-2019 - |
Вопрос
У меня есть приложение, основанное главным образом на навигационной панели. В нескольких случаях требуется представление модального представления, а в одном из этих случаев требуется скрытие строки состояния. Однако, даже если я скрываю строку состояния перед представлением модального представления, представление смещается на 20 пикселей.
Даже если я установлю рамку модального вида на 0, -20 320 480 после появления вида, он отрезает верхнюю часть вида.
Я также хочу, чтобы пользователь мог показывать строку состояния (и панель инструментов) после нажатия на экран, во многом так же, как работает видеоплеер. Поэтому для этого экрана я установил прозрачный черный стиль, и я надеюсь, что скрытие или отображение строки состояния не приведет к тому, что представление будет подпрыгивать вверх и вниз.
Решение
Исходя из вашего комментария ниже, что вы ориентируетесь на iPhone OS 2.x, у меня есть предложение, которое может помочь.
Прежде чем представить свой модальный вид, сделайте что-то вроде этого:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[[self view] setFrame:CGRectMake(0, 0, 320, 480)];
Убедитесь, что ваш модальный вид на самом деле имеет высоту 480px - однажды меня одурачило пустое пространство в 20px внизу. Оказалось, это потому, что мой взгляд был все еще 460 пикселей в высоту (для учета строки состояния), поэтому код на самом деле работал, но мой взгляд был неправильной высоты.
Когда вы скрываете ваш модальный вид, это работает:
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[[self view] setFrame:CGRectMake(0, 20, 320, 460)];
Возможно, вам придется немного изменить код, если вы используете presentModalViewController
- я попробовал это с помощью -addSubview
, потому что я использовал собственную анимацию. Но базовые принципы должны быть одинаковыми (то есть изменение рамки родительского представления).
Другие советы
Посмотрели ли вы wantFullScreenLayout свойство в UIViewControllers?