原生的 UIKit 并没有提供设置单边边框(border)的功能,view.layer.borderColor和view.layer.borderWidth 会把上下左右的边框一起设置。所以想设置单边只能自己来实现了。
画border线的思路很简单,其实就是画一条直线,把这条直线添加到 view的边缘即可。画直线的方法也有几种,有使用 UIKit 的 UIBezierPath实现的,有使用Core Graphics的。这里我使用UIBezierPath实现:
大致实现如下:
let line = UIBezierPath(rect: CGRect(x: 0, y: self.frame.size.height / 2, width: self.frame.size.width, height: 1))//实例化一条宽度为1的直线
let lineShape = CAShapeLayer()//设置路径的画布
lineShape.path = line.cgPath //设置画布的路径为贝塞尔曲线的路径
lineShape.fillColor = UIColor.red.cgColor//设置颜色
self.view.layer.addSublayer(lineShape)//添加画布的 layer
我们可以把这些代码写在 draw方法上,当然,如果想让所有的 UIView 都有这个功能,我们可以为 UIView 添加 extension :
public func setBoderLine(top:Bool,bottom:Bool,left:Bool,right:Bool,width:CGFloat,borderColor:UIColor){
if top{
let rect = CGRect(x: 0, y: 0, width: self.frame.size.width, height: width)
drawBorder(rect: rect, color: borderColor)
}
if bottom {
let rect = CGRect(x: 0, y: self.frame.size.height-width, width: self.frame.size.width, height: width)
drawBorder(rect: rect, color: borderColor)
}
if left{
let rect = CGRect(x: 0, y: 0, width: width, height: self.frame.size.height)
drawBorder(rect: rect, color: borderColor)
}
if right{
let rect = CGRect(x: self.frame.size.width - width, y:0 , width: width, height: self.frame.size.height)
drawBorder(rect: rect, color: borderColor)
}
}
在需要设置的地方调用:
guestLabel.setBoderLine(top: false, bottom: false, left: false, right: true, width: 1, borderColor: UICOLOR_RGB16(rgbValue: 0xE0E1E2))
网友评论