2016-07-04 85 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