2013-10-27 2 views
9

Я пытаюсь сохранить UINavigationBar от перемещения/изменения размера при вызове setNeedsStatusBarAppearanceUpdate.Сохранение UINavigationBar с одинаковым размером при скрытии строки состояния

Я хочу, чтобы панель навигации находилась на высоте 64 пикселя, когда строка состояния скрывается с анимацией.

Любая помощь будет оценена!

ОБНОВЛЕНИЕ: Я смог преодолеть эту проблему, создав новый UIWindow и прикрыв строку состояния.

+0

не думаю, что для этого есть API. Возможно, вам придется изменить размер вашего окна, возможно, установите 'хочетFullScreenLayout' на' NO' и т. Д. – nielsbot

+0

'хочетFullScreenLayout' [устарел] (https://developer.apple.com/library/ios/documentation/userexperience/conceptual/ TransitionGuide/AppearanceCustomization.html) в iOS 7. –

+0

Я думаю, что ваш заголовок указывает на непонимание с вашей стороны. Навигация сохраняет ту же самую высоту (44 точки), когда вы скрываете строку состояния, это только, что строка состояния (20 точек) и панель навигации выглядят как один вид, когда они фактически представляют собой два разных вида. Вы пытаетесь сделать это с помощью навигационного контроллера или у вас есть автономная панель навигации? – rdelmar

ответ

0

У меня была такая же проблема, и может исправить это изменение windowLevel к UIWindowLevelStatusBar

+0

В каком окне должен быть изменен 'windowLevel'? –

+0

окно навигацииBar, как обычно [[UIApplication sharedApplication] keyWindow] –

+0

Не окно навигацииBar 'navigationBar.window'? –

0

Вы можете сделать это

  1. переместив полное представление контроллера представления вниз по умолчанию в 20px опущенном положении, сопоставляя высоту строки состояния (т. е. она будет оставаться неизменной независимо от того, отображается ли строка состояния или нет). Вы делаете это, изменяя положение и высоту кадра.
  2. исправление наиболее вероятной нежелательной черной полосы, которую вы теперь имеете вверху, путем изменения UIWindow.backgroundColor на любой цвет, который вы предпочитаете (белый в обычном случае).

Я только что реализовал это решение после многочисленных неудачных попыток зафиксировать заикание, которое вы получаете при переключении между диспетчерами вида, где отображается строка состояния, а другая нет. Это лучшее решение, которое я нашел.

Я сделал 1. в подклассе UINavigationController. Я предполагаю, что это ваш лучший вариант, чтобы оставаться последовательным при прохождении через контроллеры подвидных контроллеров навигации. Я не тестировал другой вариант, хотя (помещая его непосредственно в суб-VC).

Почему это работает и почему это лучший способ пойти:

панель навигации на самом деле высокая всегда 44 очков (как комментаторы уже упоминался), но строка состояния 20 пункта толкает его вниз. Нажатие всего представления для этой же суммы (20) вниз обеспечивает наиболее последовательное поведение. Всякий раз, когда вы пытаетесь напрямую манипулировать UINavigationBar, iOS будет в значительной степени отменить это изменение.

Смежные вопросы