尝试为 UITableViewCell 绘制虚线边框

Posted

技术标签:

【中文标题】尝试为 UITableViewCell 绘制虚线边框【英文标题】:Trying to draw dashed border for UITableViewCell 【发布时间】:2016-10-28 06:03:25 【问题描述】:

我正在尝试使用以下代码为UITableViewCells 绘制虚线底部边框:

func addDashedBottomBorder(to cell: UITableViewCell) 
    let width = CGFloat(2.0)
    let dashedBorderLayer: CAShapeLayer = CAShapeLayer()
    let frameSize = cell.frame.size
    let shapeRect = CGRect(x: 0, y: frameSize.height, width: frameSize.width*2, height: 1) 

    dashedBorderLayer.bounds = shapeRect
    dashedBorderLayer.position = CGPoint(x: 0, y: frameSize.height)
    dashedBorderLayer.strokeColor = UIColor.lightGray.cgColor
    dashedBorderLayer.lineWidth = width
    dashedBorderLayer.lineDashPattern = [9, 6]
    dashedBorderLayer.path = UIBezierPath(roundedRect: shapeRect, cornerRadius: 5).cgPath

    cell.layer.addSublayer(dashedBorderLayer)

但是,我的虚线后面出现了一条奇怪的实线,如下所示:http://imgur.com/6kR9PgZ

我已经在viewDidLoad中设置了tableView.separatorColor = UIColor.clear

任何想法为什么我在虚线后面得到那条实线?

【问题讨论】:

【参考方案1】:

试试这个

func addDashedBottomBorder(to cell: UITableViewCell) 

    let color = UIColor.lightGray.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)

输出

【讨论】:

请告诉我们应该从哪里调用这个函数。如果每个单元格的路径不同会怎样【参考方案2】:

如果你写过

tableView.separatorStyle = .None

不过,你在 dassed 模式下方得到一条实线,然后 100% 它不是 tableview 分隔符。这是另一回事

检查您的表格背景颜色,当您清除分隔符颜色时, 单元格之间留有小空间。如果您将单元格背景颜色 与表格背景颜色不同的颜色,它像 分隔符。

【讨论】:

【参考方案3】:

目标-C

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

在斯威夫特中

tableView.separatorStyle = .None

【讨论】:

不会有任何区别。问题在于层逻辑【参考方案4】:

你用donted线显示的那一行是默认的TableViewCell分隔符,你可以直接从界面构建器中删除它,而不用编写任何代码。

在界面生成器中选择您的TableView 并在Attributes Insepector 中将Separator 属性设置为None

【讨论】:

以上是关于尝试为 UITableViewCell 绘制虚线边框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 uitableviewcell 中将边距设置为零?

UITableViewCell 阴影未为某些单元格绘制

在 UITextField 底部绘制虚线

如何制作虚线渲染器并通过强制更改颜色

Android虚线可绘制潜在ICS错误

canvas绘制虚线,虚线方框,虚线圆