提问者:小点点

为什么CGContext不能在iOS 14上的UITableViewCell中工作?


绘制线条在iOS14上不起作用。

我创建了UITableViewCell的子类。

我想在自定义单元格中画两条线。

代码在下面。

 override func draw(_ rect: CGRect) {
        super.draw(rect);

        guard let context = UIGraphicsGetCurrentContext() else { return }

        context.saveGState() // Save state. This includes transformations and clips

        context.setLineWidth(7.0)
        
//        let lineColor = UIColor(hex: "FC5622")!
//        let bgColor = UIColor(hex: "E8E6EB")!
//
        let lineColor = UIColor.red
        let bgColor = UIColor.lightGray

        context.setStrokeColor(bgColor.cgColor)
        context.move(to: CGPoint(x: 76.0, y: 32))
        context.addLine(to: CGPoint(x: (76.0 + 120.0), y: 32))
        context.setLineCap(.round)
        context.strokePath()

        context.setLineWidth(7.0)
        context.setStrokeColor(lineColor.cgColor)
        context.move(to: CGPoint(x: 76.0, y: 32))
        context.addLine(to: CGPoint(x: (76.0 + 120.0 * self.lineScale ), y: 32))
        context.setLineCap(.round)
        context.strokePath()

        context.restoreGState() // Put back state. This includes transformations and clips
    }

它在iOS 12上运行良好。它在iOS 14上不起作用。(不知道在iOS 13上是否管用)。

我不知道我能做些什么来解决这个问题。

你知道原因吗?你能修好它吗?


共2个答案

匿名用户

您不应该试图重写表格视图单元格的draw(_rect:CGRect)。单元格有子视图,子视图有子视图,单元格本身做的不仅仅是“存在”。

如果您使用debug View hierarchy,您就会看到哪里出了问题,这将进一步说明这是个坏主意的原因。

使用IOS14时,单元格结构发生了变化,您应该只操作单元格的.contentView,而不是单元格本身。

更好的做法是将其作为一个自定义视图添加到内容视图中。

匿名用户

不应该重写表格单元格的绘图(_rect:CGRect)。相反,创建一个新的自定义视图并将其添加到单元格的contentView中,然后在其中绘制。

您应该创建UIView并将其作为contentView属性的子视图添加。关于DrawRect:UITableViewCell,这里和整个web上有很多问题/答案,其中大多数建议您不要这样做。