2016-07-04 32 views
1

这几乎是我的问题。我想在表格视图中创建圆形的纯单元格。我在TableViewCell类中覆盖drawRect(frame: CGRect),但是当显示单元格时,设备(模拟器也会)冻结约1秒,调试器显示CPU使用率高达75%。UITableViewCell drawRect()覆盖使设备真的很慢(CPU使用率高峰)

不在于它可能是任何用处的,但这里是我的代码:

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

那么,有没有更简单/更高效/“合法”(有人说中重写的drawRect被认为是“哈克”)的方式简单地使每个细胞比屏幕更窄?

+3

实际的单元格框架将由tableview管理,您可以在'cell.contentView'内添加自己的自定义子视图。为什么你一直在使用drawrect?担心表现? tableview可以高效地缓存和重用单元格。除非您在屏幕上显示1000个单元格,否则您不需要担心绘图的效率 – thelaws

+0

是的,我注意到CPU尖峰只发生在第一个单元格上,然后它工作正常。我会尝试使用子视图。发布它作为答案,所以我会选择它。谢谢! – Lawrence413

回答

1

你真的不被允许使用drawRect来修改视图的框架。 drawRect只是给你一个机会在给定的框架内绘制。

UITableViewCell的实际框架由UITableView通过它的宽度和heightForRowAtIndexPath:方法进行管理。此外,表格视图在缓存和重用单元格方面非常高效。除非您在屏幕上显示1000个单元格,否则不需要担心绘图的效率。

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

+0

谢谢!我做了你在评论中所说的话,并且工作得很好。 – Lawrence413