Добавление пунктирной нижней границы к ячейке табличного представления случайно перекрывается текстом в iOS - PullRequest
0 голосов
/ 12 февраля 2019

Я использую приведенный ниже код, чтобы добавить пунктирную пользовательскую нижнюю границу к ячейкам таблицы.Теперь оно случайно перекрывается с контентом.Иногда граница не отображается.

class AppTableCell: UITableViewCell {
    var shapeLayer: CAShapeLayer?
    var isBorderAdded = false

    func isBottomBorderAdded() -> Bool {
        return isBorderAdded
    }

    func getBottomBorderShapeLayer() -> CAShapeLayer {
        return self.shapeLayer!
    }

    func setBottomBorderShapedLayer(_ layer: CAShapeLayer) {
        self.shapeLayer = layer
    }
}

Расширение ячейки табличного представления из вышеприведенного класса и вызов функции ниже в методе func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell.

func addDashedBottomBorder(to cell: AppTableCell) {
    let color = UIColor.init(red: 191/255, green: 191/255, blue: 191/255, alpha: 1.0).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 = CAShapeLayerLineJoin.round
    shapeLayer.lineDashPhase = 3.0
    shapeLayer.lineDashPattern = [9,6]
    shapeLayer.path = UIBezierPath(roundedRect: CGRect(x: 0, y: shapeRect.height, width: shapeRect.width, height: 0), cornerRadius: 0).cgPath
    if (cell.isBorderAdded) {
        cell.shapeLayer!.removeFromSuperlayer()
    }
    cell.shapeLayer = shapeLayer
    cell.isBorderAdded = true
    cell.layer.addSublayer(shapeLayer)
}

border overlap

Как правильно отображать пунктирную нижнюю границу в конце каждой ячейки?

1 Ответ

0 голосов
/ 12 февраля 2019

Вы добавляете подслой в слой вашей ячейки с фиксированной позицией:

shapeLayer.position = CGPoint(x: frameSize.width/2, y: frameSize.height)
[...]
cell.layer.addSublayer(shapeLayer)

Так что он не прилипает к нижней стороне вашей ячейки.

Вы можете обновить позицию этого слоякаждый раз, когда высота ячейки изменяется, но мое предложение с точки зрения производительности и простоты будет заключаться в использовании autolayout.

Добавьте подпредставление в нижней части ячейки, добавьте ограничения, чтобы она прикрепилась, и добавьте толькоодин раз (в awakeFromNib, например, если он разработан в IB) внутри dashedLayer.

...