尝试在tableview中添加虚线边框分隔符

时间:2018-05-13 05:25:53

标签: ios swift uitableview cashapelayer

使用这个例子我试图在我的UITableView中添加一个虚线边框。

Trying to draw dashed border for UITableViewCell

但它不起作用。它没有显示任何内容。

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中没有显示任何内容。

1 个答案:

答案 0 :(得分:0)

从您的代码的以下两行:

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

kCALineJoinRound正在制作上下虚线,但由于height的{​​{1}}为0,它们重叠。所以,将代码更新为:

UIBezierPath

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

最佳解决方案:

您可以通过向 shapeLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: shapeRect.height, width: shapeRect.width, height: 1), cornerRadius: 0).cgPath 提供lineDashPhase来纠正错误,而不是隐藏下划线,如下:

CAShapeLayer

收到的信息是:

enter image description here