我的导航堆栈中有一个视图控制器,它需要有一个透明的导航栏,同时仍显示后退按钮。
我可以在viewWillAppear
中使用一行代码来实现这一点:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
但是,当我尝试返回到上一个视图时,我将背景图像设置回了nil
或.none
,但是我失去了以前在那时的半透明效果我做到了。
我尝试在viewWillDisappear
中设置以下所有选项,但似乎没有一个能让透明度恢复。无论我做什么,它看起来都是白色的。底部的阴影也消失了:
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.navigationBar.barStyle = .default
self.navigationController?.navigationBar.backgroundColor = .none
self.navigationController?.navigationBar.setBackgroundImage(.none, for: .default)
初始导航栏:
透明导航栏:
向后过渡后:
答案 0 :(得分:1)
在viewWillAppear
中使导航栏透明
override func viewWillAppear(_ animated: Bool) { self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
}
然后在viewWillDisappear
中将背景色设为半透明
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.shadowImage = nil
self.navigationController?.navigationBar.isTranslucent = false
}
答案 1 :(得分:0)
花了一些时间在UINavigationBar的内部进行探索之后,我确实发现了一个似乎可行的简单方法,不需要对我们之前为实现透明性而费解的标准UINavigationBar属性进行任何配置。在iOS 12.2.x上可以测试以下内容:
std::vector<std::shared_ptr<const Object>>
很明显,只要摆弄(甚至略微)未公开的内部资料,使用后果自负!
答案 2 :(得分:0)
这适用于我的应用,它需要在从透明导航栏弹出后恢复为不透明导航栏。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
navigationController?.navigationBar.shadowImage = nil
navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.backgroundColor = nil
}