【发布时间】:2017-06-03 11:21:08
【问题描述】:
当弹出回上一个控制器时,我正在尝试对导航栏的颜色变化进行动画处理。为了给它一些上下文,我有一个控制器 A,它是一个 collectionView 控制器,并且有一个不透明的导航栏颜色设置:
self.navigationController?.navigationBar.barTintColor = UIColor.rgb(red: 244, green: 67, blue: 54)
self.navigationController?.navigationBar.tintColor = .white
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]
self.navigationController?.navigationBar.isTranslucent = false
一旦选择了一个collectionViewCell,我就会推送到下一个控制器B,其中导航栏被更改为透明:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
当用户点击后退箭头时,我希望导航栏返回其原始颜色。我在控制器 B 的 viewWillDissappear 函数、willMove(toParentViewController) 和控制器 A 上的 viewWillAppear 函数上尝试了一个简单的 UIView 动画:
这是动画:
UIView.animate(withDuration: 0.5) {
self.navigationController?.navigationBar.barTintColor = UIColor.rgb(red: 244, green: 67, blue: 54)
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.layoutIfNeeded()
}
完成此操作后,我尝试使用过渡协调器,但得到了相同的结果:
guard let coordinator = self.transitionCoordinator else {
return
}
coordinator.animate(alongsideTransition: {
[weak self] context in
self?.navigationController?.navigationBar.barTintColor = UIColor.rgb(red: 244, green: 67, blue: 54)
self?.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self?.navigationController?.navigationBar.shadowImage = nil
self?.navigationController?.navigationBar.isTranslucent = false
self?.navigationController?.navigationBar.layoutIfNeeded()
}, completion: nil)
似乎无论我尝试什么,或者我把代码放在哪里,我总是得到相同的结果。我知道代码是重复的,但我只是想弄清楚为什么,所以发生了很多复制和粘贴。
据我所知,我认为它与之前的控制器的背景视图有关,但我很难过,我似乎看到导航栏下的动画之前黑屏。任何帮助将不胜感激。
谢谢
【问题讨论】:
-
查看这篇文章可能对stackoverflow.com/questions/39835420/…有帮助
-
这确实有帮助,谢谢:)
标签: swift animation uinavigationbar bartintcolor