Подтвердить что ты не робот

Переход между прозрачной навигационной панелью в полупрозрачный

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

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

Снимок экрана 1 (Popping): Screenshot 1

Снимок экрана 2 (Pushing): Screenshot 2

4b9b3361

Ответ 1

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

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

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

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

  • Вкл nowplaying_vc viewWillAppear:

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

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

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

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

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

Ответ 2

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

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

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