UITableViewCell 複雜時,高度計算優

2021-07-10 23:25:11 字數 1473 閱讀 1646

方法1:簡單粗暴,利用新的api介面 systemlayoutsizefittingsize

我們宣告乙個存計算cell高度的例項變數:

@property (nonatomic, strong) uitableviewcell *prototypecell; 

然後初始化它:

self.prototypecell  = [self.tableview dequeuereusablecellwithidentifier:@

"c1"

];實現

tableview的高度**

- (cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath  

要求返回乙個cell的估計值,

(cgfloat)tableview:(uitableview )tableview estimatedheightforrowatindexpath:(nsindexpath )indexpath。

方法優化1:cell

使用屬性儲存,呼叫方便。並且防止計算cell高度時重複建立cell例項。

優化2,cell的高度通過新api計算cell.contentview自動適配後的的高度然後加1。

優化3,

避免反覆呼叫多次heightforrowatindexpath

優化4,sizethatfits優化計算uitextview的高度

主要應用:auto layout with uilabel uitextview in uitableviewcell

方法2:靈活巧用cgsize

- (uitableviewcell *)tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath 

- (cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath  

這兒用到了乙個nsstring的cagetory方法:

- (cgsize)calculatesize:(cgsize)size font:(uifont *)font ; 

expectedlabelsize = [self boundingrectwithsize:size options:nsstringdrawinguseslinefragmentorigin attributes:attributes context:nil].size; 

} else

return

cgsizemake(ceil(expectedlabelsize.width), ceil(expectedlabelsize.height)); 

} 使用到的方法  

sizetofit,boundingrectwithsize,sizewithfont

計算UITableViewCell高度

uitableview是先執行 cgfloat tableview uitableview tableview heightforrowatindexpath nsindexpath indexpath函式計算整個uitableview內容高度,然後才執行 uitableviewcell table...

UITableViewCell重用問題

在寫sina 微博介面的過程中使用到了cell,那麼就是在cell上新增一些控制項,但是由於每條微博的內容都是不同的,所以在顯示的過程中,出現了內容重疊的問題,其實就是uitableviewcell重用機制的問題。cpp view plain copy uitableviewcell tablevi...

UITableViewCell重用機制

uitableview是ios開發中使用頻率非常高的乙個控制項,它常被用來展示資訊列表,儘管資訊資料可能非常多,但uitableview消耗的資源卻並不會隨著展示資訊的增多而變大,這都要得益於uitableviewcell的重用機制,重用機制 顧名思義,就是反覆利用資源的機制。以下通過一些 來看下通...