UITableViewCell drawRect() 重写使设备非常慢(CPU 使用高峰)

UITableViewCell drawRect() Override Makes Device Really Slow (CPU Usage Spike)

这几乎是我的问题。我想在 table 视图中创建圆形的普通单元格。我在 TableViewCell class 中覆盖了 drawRect(frame: CGRect),但是当显示单元格时,设备(模拟器也是)冻结了大约 1 秒并且调试器在 CPU 中显示了一个尖峰使用率达到 75%。

并不是说它可能有任何用处,但这是我的代码:

    override func drawRect(rect: CGRect) {
    frame.origin.x = 10
    frame.size.width -= 20
}

那么有没有更有效的easier/MUCH/"legal"(有人说覆盖 drawRect 被认为 "hacky")简单地使每个单元格比屏幕窄的方法?

您实际上不能使用 drawRect 修改视图的框架。 drawRect只是给了你一个在给定的框架内画画的机会。

UITableViewCell 的实际框架由 UITableView 通过其宽度和 heightForRowAtIndexPath: 方法管理。此外,table 视图在缓存和重用单元格方面非常有效。除非你在屏幕上显示 1000 的单元格,否则你不必担心绘图的效率。

我认为您应该向单元格的 contentView 添加一个子视图,并将它的框架设置为插入到单元格中。这可以在自定义单元格 xib 中使用自动布局来完成,或者在 cellForRowAtIndexPath:.

中手动完成