NavigationController从透明导航栏过渡到非透明导航栏

时间:2019-03-10 08:49:25

标签: ios uinavigationcontroller uikit uinavigationbar

我目前正在尝试添加一个与Tripadvisor,Airbnb和co等应用程序中的当前实施等效的过渡。 我说的是从透明的导航栏到彩色的导航栏再退回来。

因此,起初我实现了两种方法。 makeNavBarVisiblemakeNavBarTransparent 该实现应该易于理解。

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()
    })
}

现在出现了问题,目前我无法找到一个简单的解决方案。当我使用交互式弹出手势时,过渡看起来正确。但是,如果按“后退”按钮,动画似乎有问题。为何协调员在使用手势时会起作用,而在按下“后退”按钮时却不起作用。对我来说,这似乎是一个错误。有人遇到与您相同的问题吗?如果是,您如何避免呢?

enter image description here

0 个答案:

没有答案