2013-11-12 3 views
23

В недавно выпущенном удаленном приложении Apple я заметил, что поведение навигационной панели уникально, и я не смог воспроизвести его. При появлении контроллера просмотра Now Playing панель навигации остается прозрачной для контроллера просмотра Now Playing, а панель навигации для контроллера просмотра библиотеки также остается полупрозрачной (снимок экрана 1). Я пытаюсь выяснить, используют ли они два навигационных контроллера или только один. Лично я чувствую, что они используют только одну по двум причинам (1) включен интерактивный поп-жест; (2), когда вы нажимаете кнопку «Now Playing» в контроллере просмотра библиотеки, перед тем, как играющий экран завершит анимацию «push view controller», панель навигации станет прозрачной (снимок экрана 2). Это поведение, которое я испытываю при нажатии моего контроллера представления (который устанавливает прозрачность панели навигации). Поэтому мой вопрос: как Apple представляет обе панели навигации двух контроллеров представления, как если бы они были индивидуальными (как и в случае с Скриншотом 1), даже кнопки панели, название навигации и т. Д. ... на 100% непрозрачности при переключении (обычно когда нажатие/выталкивание кнопок и заголовков предыдущего контроллера представления исчезает при нажатии на новый контроллер). Я попытался поиграть с цветом оттенка штриха в viewDidAppear и viewWillAppear в обоих контроллерах представления, но не может воспроизвести одно и то же поведение и не может препятствовать выгоранию кнопок панели.Переход между прозрачной навигационной панелью на полупрозрачный

Надеюсь, я объяснил это хорошо, я запутался, просто подумав об этом!

Скриншот 1 (Выталкивание): Screenshot 1

Скриншот 2 (Нажатие): Screenshot 2

+0

Его хорошо объяснили [здесь] [1]. Прочитать. [1]: http://stackoverflow.com/questions/17074365/status-bar-and-navigation-bar-appear-over-my-views-bounds-in-ios-7 – Abhinav

+0

@Abhinav Спасибо, но я не понимаю, как это касается моей проблемы. Я не хочу вставки сверху. Как и приложение Remote, я хочу, чтобы таблица прокручивалась под панелью навигации, но я также хочу воспроизвести Скриншот 1, где все кнопки, цвет оттенков навигационной панели и заголовки сохраняются для обоих представлений во время перехода. – sooper

+0

@sooper Пожалуйста, проверьте мой ответ. –

ответ

32

Я скачал приложение, чтобы убедиться. Используются две различные панели навигации. Вы можете увидеть это, используя интерактивный поп-жест. Обратите внимание, что панель навигации на контроллере нижнего обзора перемещается и вынимается. Во время обычных переходов push и pop, навигационные элементы просто исчезают и выходят на существующий бар, в то время как планка неподвижна. Это то, что происходит до тех пор, пока не будет нажат текущий контроллер воспроизведения.

Если вы посмотрите быстро, во время анимации контроллера воспроизводимого представления вы увидите, что нижняя панель навигации исчезает.

Из моего опыта с поведением UIKit и то, что я вижу в приложении, вот что я думаю, что происходит:

album_vc = нижний, вид списка контроллеров nowplaying_vc = верхний контроллер представления

  • на nowplaying_vc «s viewWillAppear:

    • Установите панель навигации для скрытого USI нг [self.navigationController setNavigationBarHidden:YES animated:YES];. Поскольку это в блоке анимации, это заставит навигационную панель выдвигаться во время анимации push.
    • Set [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; Довольно уверен в этом, потому что уведомление о переходе стилей строки состояния не происходит. Он просто становится белым.
  • На nowplaying_vc «s viewWillDisappear:

    • Установите панель навигации, чтобы показать, используя [self.navigationController setNavigationBarHidden:NO animated:YES];.Так как это в блоке анимации, это заставит навигационную панель скользить во время поп-анимации.
    • Set [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; Опять же, обратите внимание, как во время интерактивного пота жест, строка состояния просто меняется без анимации.

Для достижения прозрачного внешнего вида навигационной панели nowplaying_vc, вы можете использовать пустое изображение ([UIImage alloc]) с setBackgroundImage:forBarPosition:barMetrics:.

Поскольку приложение не вращается, мы не можем быть уверены, что навигационная панель на nowplaying_vc является частью другого навигационного контроллера или просто навигационной панели сверху с позицией UIBarPositionTopAttached. Насколько нам известно, в нем нет даже навигационной панели, а просто обратного просмотра изображения шеврона (кнопка задней панели состоит из изображения и кнопки).

Я думаю, что стиль строки состояния изменен в viewWillAppear: и viewWillDisappear: из-за неестественного ощущения во время интерактивного пота. Я бы рекомендовал использовать анимированный переход или, что еще лучше, использовать новый стиль строки состояния на основе контроллера, который система сама анимирует переходы.

+0

приветствует это, не успел попробовать, но обязательно вернется к вам, когда я это сделаю. – sooper

+0

@sooper Пожалуйста, свяжитесь с нами. Меня тоже интересует, что происходит. Благодаря! –

+0

Я уверен, что это правильный подход, но единственная проблема, с которой я сейчас сталкиваюсь, заключается в том, что интерактивный позыв отключен, когда панель навигации скрыта. Поэтому я не могу использовать поп-жест в 'nowplaying_vc' так, как это делает приложение Remote. – sooper

3

Вместо того, чтобы скрывать и показывать панель навигации, вы можете обновить альфу для панели навигации. Он будет плавно перемещаться во время перехода. Для контроллера вида с прозрачной навигационной панелью вместо изменения панели навигации создайте навигационную панель (или только кнопку «Назад» и название и т. Д.) Вручную во время просмотра второго контроллера. Затем мы скроем навигационную панель при переходе от первого контроллера к второму.

На вашем первом контроллере viewWillDisappear и на вашем втором контроллере контроллера viewWillAppear: установите навигационную панель альфа на ноль, используя self.navigationController.navigationBar.alpha = 0;. Так как это в блоке анимации, это приведет к тому, что панель навигации исчезнет во время анимации push.

Установите альфа обратно на один в viewWillAppear первого контроллера и второй контроллер viewWillDisappear.

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