尝试在表格视图中添加虚线边框分隔符

Trying to add dashed border separator in tableview

使用此示例,我尝试向我的 UITableView 添加虚线边框。

但是不行。它什么也没显示。

func addDashedBottomBorder(to cell: UITableViewCell) {
    let color = UIColor.black.cgColor

    let shapeLayer:CAShapeLayer = CAShapeLayer()
    let frameSize = cell.frame.size
    let shapeRect = CGRect(x: 0, y: 0, width: frameSize.width, height: 0)

    shapeLayer.bounds = shapeRect
    shapeLayer.position = CGPoint(x: frameSize.width/2, y: frameSize.height)
    shapeLayer.fillColor = UIColor.clear.cgColor
    shapeLayer.strokeColor = color
    shapeLayer.lineWidth = 2.0
    shapeLayer.lineJoin = kCALineJoinRound
    shapeLayer.lineDashPattern = [9,6]
    shapeLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: shapeRect.height, width: shapeRect.width, height: 0), cornerRadius: 0).cgPath

    cell.layer.addSublayer(shapeLayer)
}

我在 cellForRowAt 中使用此方法,但在 viewDidLoadtable.separatorStyle = .none.

中没有显示任何内容

来自以下两行代码:

    shapeLayer.lineJoin = kCALineJoinRound
    shapeLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: shapeRect.height, width: shapeRect.width, height: 0), cornerRadius: 0).cgPath

kCALineJoinRound 正在制作上下划线,但由于 UIBezierPathheight 为 0,因此它们重叠。因此,将您的代码更新为:

    shapeLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: shapeRect.height, width: shapeRect.width, height: 1), cornerRadius: 0).cgPath

它会隐藏下面的线,你会得到想要的结果。

最佳解决方案:

与其隐藏下方的虚线,您可以通过仅向 CAShapeLayer 提供 lineDashPhase 来更正它,如:

    shapeLayer.lineJoin = kCALineJoinRound
    shapeLayer.lineDashPhase = 3.0 // Add "lineDashPhase" property to CAShapeLayer
    shapeLayer.lineDashPattern = [9,6]
    shapeLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: shapeRect.height, width: shapeRect.width, height: 0), cornerRadius: 0).cgPath

收到的行是: