我在导航栏中使用大标题。我还称它有这样的阴影。
https://i.ibb.co/WckRgVb/file-3.jpg
现在我想隐藏阴影,但只在大标题上,当我向下滚动(正常大小)时,阴影应该出现。
这是代码,我现在正在使用:
extension UINavigationController {
// Shado Style for Nav Bar
func shadowStyle(largeTitle: Bool = false) {
navigationBar.shadowImage = UIImage()
navigationBar.layer.masksToBounds = false
navigationBar.layer.shadowColor = UIColor(red:0.80, green:0.80, blue:0.80, alpha:1.0).cgColor
navigationBar.layer.shadowOpacity = 0.7
navigationBar.layer.shadowOffset = CGSize(width: 0, height: 2.0)
navigationBar.layer.shadowRadius = 5
if(largeTitle) {
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .always
navigationBar.prefersLargeTitles = true
}
} else {
if #available(iOS 11.0, *) {
navigationItem.largeTitleDisplayMode = .never
navigationBar.prefersLargeTitles = false
}
}
}
}
我在ViewController中将其称为:
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.shadowStyle(largeTitle: true)
// other code
}
我的问题是,只有在显示大标题时,如何删除阴影?
要在单个条上执行此操作,只需直接设置即可。
无论何时你想要,要更改所有条形,使用AppDelegate
的外观代理在UINavigationBar
中设置它,以便在加载第一个条形图之前启动它。
这里有一个例子,标题文字为蓝点的格鲁吉亚Bold 18点:
let attrs = [
NSAttributedString.Key.foregroundColor: UIColor.blue,
NSAttributedString.Key.font: UIFont(name: "Georgia-Bold", size: 18)!
]
UINavigationBar.appearance().titleTextAttributes = attrs
检查这个布尔:self.navigationController?.navigationBar.prefersLargeTitles
override func viewWillAppear(_ animated: Bool) {
if self.navigationController?.navigationBar.prefersLargeTitles {
self.navigationController?.shadowStyle(largeTitle: true)
}
// other code
}
现在我发现了自己。
我只需要根据导航栏的高度设置navigationBar.layer.shadowOpacity
:navigationBar.frame.size.height