我目前正在尝试添加一个与Tripadvisor,Airbnb和co等应用程序中的当前实施等效的过渡。 我说的是从透明的导航栏到彩色的导航栏再退回来。
因此,起初我实现了两种方法。
makeNavBarVisible
和makeNavBarTransparent
该实现应该易于理解。
public func makeNavBarTransparent() {
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()
}
public func makeNavBarVisible() {
navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
navigationController?.navigationBar.shadowImage = nil
}
这就像一个护身符。 然后,我想到了动画过渡的最佳方法。因此,我查看了 UIKit 文档,发现每个转换现在都有一个可用于动画的协调器。因此,我在viewDidLoad中配置了协调器,它起作用了。
override func viewDidLoad() {
super.viewDidLoad()
transitionCoordinator?.animate(alongsideTransition: { context in
self.makeNavBarTransparent()
})
}
然后,我还向协调器添加了一个动画块以进行向后过渡。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
transitionCoordinator?.animate(alongsideTransition: { context in
self.makeNavBarVisible()
})
}
现在出现了问题,目前我无法找到一个简单的解决方案。当我使用交互式弹出手势时,过渡看起来正确。但是,如果按“后退”按钮,动画似乎有问题。为何协调员在使用手势时会起作用,而在按下“后退”按钮时却不起作用。对我来说,这似乎是一个错误。有人遇到与您相同的问题吗?如果是,您如何避免呢?