问题描述
我有2个屏幕,其中有一个通用的导航控制器和一个通用的导航栏。第一个屏幕应该没有分隔符,第二个屏幕应该具有自定义颜色的分隔符。
我尝试的代码:
1)
navigationController?.navigationBar.shadowImage = ...//some image with an appropriate color
let appearance = UINavigationBarappearance()
appearance.shadowImage = navBarSeparatorColor.as1ptimage()
navigationController?.navigationBar.scrollEdgeAppearance = appearance
似乎第一段代码适用于ios 12,仅此而已。在iOS 13或14上都无效。
注意:还有一些类似的问题,但是它们的“解决方案”不适用于iOS 13,也完全没有针对iOS 14的问题。
解决方法
我认为在iOS 13上,您需要在navigationBar
内设置外观对象,例如:
class FirstViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.standardAppearance.shadowColor = .clear
}
}
class SecondViewController: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.standardAppearance.shadowColor = .red
}
}
请注意还有其他外观:compactAppearance
和scrollEdgeAppearance
。除了设置shadowColor
以外,您还可以设置shadowImage
。