1 iOS 15下导航栏失效的缘由
根本缘由是ios改变了导航栏背景色设置的逻辑,导致之前设置失效了,详情参考官网。目前需要使用UINavigationBarAppearance
来完成设置。
if #available(iOS 15.0, *) {
let standardAppearance = UINavigationBarAppearance()
standardAppearance.configureWithOpaqueBackground()
standardAppearance.backgroundColor = UIColor.white;
standardAppearance.shadowImage = generateImageWithColor(color: UIColor.white) // 去掉导航栏阴影线的关键。
navigationController?.navigationBar.standardAppearance = standardAppearance // 重新设置外观
navigationController?.navigationBar.scrollEdgeAppearance = standardAppearance // iOS 15后这个逻辑的改变,导致之前的设置方式无效
} else {
navigationController?.navigationBar.tintColor = UIColor(hex: "363636")
navigationController?.navigationBar.barTintColor = UIColor.white
}
2 去掉导航栏横线
在iOS 15上,我们发现使用一般的设置方法navigationController?.navigationBar. shadowImage = UIImage()
或者standardAppearance.shadowImage = UIImage()
竟然无效!!!,难道说真的要使用复杂的写法找出shadowImage然后把它隐藏掉???
网上有写法是找到阴影线的控件把它隐藏掉,我感觉这种方式太复杂,就这么一个简单的设置需要写那么多的代码,得不常失。
思路
既然横线在导航栏是一个图片控件,那么为什么我们不传给他一个带颜色的图像就行了吗?当然我们不能够专门为一个横线去找设计师要一张图片吧,不要担心我们可以自己绘制一个。下面就是把颜色转成图片的方法。
private func generateImageWithColor(color:UIColor) -> UIImage{
let rect = CGRect.init(x: 0, y: 0, width: 1, height: 1)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()!
context.setFillColor(color.cgColor)
context.fill(rect)
let img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img!
}
注我们绘制的是一个像素点完全不用担心它会消耗超级多的资源,UIViewImage会自动充填剩余空间的,所以我们只要绘制1个像素点即可。
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
暂无评论内容