2015-07-07 4 views
9

Я пытаюсь скопировать переход на push/pop из приложения IOS Music с полупрозрачного на прозрачный UINavigationBar, сохраняя при этом элементы UIBarButtonItems. Поскольку панель навигации не перемещается сама по себе, я считаю, что вам нужно настроить UINavigationBar прозрачно для обоих UIViewControllers и добавить subview в UIViewController под прозрачным UINavigationBar, чтобы имитировать полупрозрачный UINavigationBar. Любые решения для этой проблемы?Переход на прозрачный UINavigationBar (Apple Music, как панель навигации)

iOS Music app transition

+0

efremidze, как вы в конечном итоге реализации это? – SAHM

+0

Я использую эту библиотеку: https://github.com/MoZhouqi/KMNavigationBarTransition – efremidze

ответ

8
+3

Еще одно решение: https://blog.austinchou.com/apple-music-like-navigation-bar/ – avdyushin

+0

@avdyushin Спасибо, отличная ссылка! – efremidze

+0

на самом деле это libs не то же самое, что реализовано в google music ... –

4

ваших данных контроллер поместить этот код

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    guard self.navigationController?.topViewController === self else {return} 

    self.transitionCoordinator()?.animateAlongsideTransition({ [weak self](context) in 
     self?.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 
     self?.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) 

     }, completion: { context in 
    }) 
} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 

    guard self.navigationController?.topViewController === self else {return} 

    self.transitionCoordinator()?.animateAlongsideTransition({ [weak self](context) in 
     self?.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default) 
     self?.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: .Default) 
     }, completion: { context in 
    }) 
} 
+0

Это почти идеально, вместо двух вызовов функции 'setBackgroundImage' должно быть свойство' shadowImage', в котором я устанавливаю его в новый 'UIImage()' вместо nil. Кроме того, инструкции охраны не кажутся мне нужными, но не уверены, имеет ли значение значение –

+1

. Обратите внимание, что для этого свойство 'edgeForExtendedLayout' на вашем представлении контроллера представления не должно включать верхний край (то есть край соответствующий навигационной панели). В противном случае ваш расширенный контент будет отображаться через панель навигации, когда он станет прозрачным во время перехода. Если вы используете представление таблицы или коллекции, вам может потребоваться прокрутка вниз, прежде чем вы увидите, что это произойдет. Чтобы сохранить «edgeForExtendedLayout», вам нужно создать панель навигации для замедлителя или попробовать решение, подобное [TFTransparentNavigationBar] (https://github.com/thefuntasty/TFTransparentNavigationBar). – jamesk

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