Próbuję skopiować przejście push/pop aplikacji Muzyka iOS z półprzezroczystego do przezroczystego paska UINavigationBar, zachowując widoczne elementy UIBarButtonItem. Ponieważ pasek nawigacji nie porusza się sam, uważam, że należy ustawić przezroczysty pasek UINavigationBar dla obu kontrolerów UIViewController i dodać podgląd podzbioru do kontrolera UIViewControler w przezroczystym pasku UINavigationBar, aby symulować półprzezroczysty pasek UINavigationBar. Jakieś rozwiązania tego problemu?Przejście do przezroczystego paska UINavigationBar (muzyka Apple podobna do paska nawigacji)
Odpowiedz
Na kontrolerze dane umieścić ten kod
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
})
}
To prawie idealne, zamiast dwóch wywołań funkcji 'setBackgroundImage' należy ustawić właściwość' shadowImage', w której ustawiam ją na nową 'UIImage()' zamiast zera. Ponadto instrukcje strażników nie wydają się być potrzebne w moim, nie jestem pewien, czy to robi różnicę. –
Należy zauważyć, że aby to zadziałało, własność 'edgesForExtendedLayout' na prezentowanym kontrolerze widoku nie może zawierać górnej krawędzi (tzn. Krawędzi odpowiadający paskowi nawigacji). W przeciwnym razie twoja rozszerzona zawartość zostanie wyświetlona na pasku nawigacji, gdy stanie się przezroczysta podczas przejścia. Jeśli korzystasz z widoku tabeli lub widoku kolekcji, może być konieczne przewinięcie w dół, zanim to się stanie. Aby zachować 'edgesForExtendedLayout', musisz utworzyć zastępczy pasek nawigacji lub wypróbować rozwiązanie takie jak [TFTransparentNavigationBar] (https://github.com/thefuntasty/TFTransparentNavigationBar). – jamesk
efremidze, jak trafiłeś do realizacji to? – SAHM
Używam tej biblioteki: https://github.com/MoZhouqi/KMNavigationBarTransition – efremidze