带阴影的导航栏拐角半径 [英] Navigation bar with shadow & corner radius
本文介绍了带阴影的导航栏拐角半径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想添加圆角半径 &我的导航控制器上的阴影.我知道如何分开做,但是当我尝试同时放置两者时,只应用了一个.我尝试过 CALayer,但没有成功.
I would like to add corner radius & shadow on my navigation controller. I know how to do separately, but when I try to put both at the same time, only one is applied. I tried with CALayer, without success.
说明我想要的图像
推荐答案
代码如下,
// 1. Enable prefersLargeTitles and title
self.navigationController?.navigationBar.prefersLargeTitles = true
self.title = "Title"
// 2. Add left, right bar buttons
let leftBtn = UIBarButtonItem(title: "Edit", style: .done, target: self, action: #selector(item))
let rtBtn = UIBarButtonItem(title: "Add", style: .done, target: self, action: #selector(item))
self.navigationItem.rightBarButtonItem = rtBtn
self.navigationItem.leftBarButtonItem = leftBtn
//3. Change default navbar to blank UI
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.tintColor = UIColor.orange
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.white
//4. Add shadow and cirner radius to navbar
let shadowView = UIView(frame: CGRect(x: 0, y: -20,
width: (self.navigationController?.navigationBar.bounds.width)!,
height: (self.navigationController?.navigationBar.bounds.height)! + 20))
shadowView.backgroundColor = UIColor.white
self.navigationController?.navigationBar.insertSubview(shadowView, at: 1)
let shadowLayer = CAShapeLayer()
shadowLayer.path = UIBezierPath(roundedRect: shadowView.bounds, byRoundingCorners: [.bottomLeft , .bottomRight , .topLeft], cornerRadii: CGSize(width: 20, height: 20)).cgPath
shadowLayer.fillColor = UIColor.white.cgColor
shadowLayer.shadowColor = UIColor.darkGray.cgColor
shadowLayer.shadowPath = shadowLayer.path
shadowLayer.shadowOffset = CGSize(width: 2.0, height: 2.0)
shadowLayer.shadowOpacity = 0.8
shadowLayer.shadowRadius = 2
shadowView.layer.insertSublayer(shadowLayer, at: 0)
输出:
您可以使用
self.navigationController?.view.safeAreaInsets.top
iPhone X 返回 44,iPhone 8 返回 20
代码
var offset : CGFloat = (self.navigationController?.view.safeAreaInsets.top ?? 20)
let shadowView = UIView(frame: CGRect(x: 0, y: -offset,
width: (self.navigationController?.navigationBar.bounds.width)!,
height: (self.navigationController?.navigationBar.bounds.height)! + offset))
输出 iPhoneX
这篇关于带阴影的导航栏拐角半径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文