iOS autoLayout约束下,给UITableViewCell内部的UIView添加带圆角虚线框
效果class Cell0: UITableViewCell {
@IBOutlet weak var remark_view: UIView! //remark_gray父视图
@IBOutlet weak var remark_gray: UIView! //remark_label灰色外框
@IBOutlet weak var remark_label: UILabel!
var dashLayer: CAShapeLayer? //虚线
var remark: String? {
didSet {
remark_label.text = remark //赋值后通过约束 自动变化高度
...
//因为是autoLayout,渲染需要时间。如果不延时,无法获取渲染后的frame
//如果你用的是坐标实现布局(事先可计算出目标view的frame),就不必写延时,可自行直接计算frame。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
let dashBound = self.remark_gray.bounds
let path = UIBezierPath(roundedRect: dashBound, cornerRadius: 4.0)
self.dashLayer = CAShapeLayer()
self.dashLayer!.path = path.cgPath
self.dashLayer!.strokeColor = UIColor.red.cgColor
self.dashLayer?.fillColor = UIColor.clear.cgColor//如果不设置填充色,view内容将被黑色覆盖
//以path(理想化,宽度=0)为中心向两边扩展为宽度=2的路径。因为path是以remark_gray.bound为路径,所以line宽度一半在remark_gray(view)内部,一半在外部。
//又因为设置了remark_gray的clipToBounds=true进行剪切,所以实际绘制的虚线(dashLayer),宽度=2,但可见部分只有宽度=1。
self.dashLayer!.lineWidth = 2.0
self.dashLayer!.lineDashPattern = [4,2]//实线长度=4,空白长度2
self.remark_gray.layer.addSublayer(self.dashLayer!)
})
}
}
}
}
网友评论