tableview優(yōu)化--什么叫提前在model里把cell高度計算好

需求背景:
類似朋友圈,有文字,有圖片,文字的高度不定,cell的高度需要根據(jù)文字和圖片的數(shù)量進行計算


我們知道tableview的delegate里面有兩個方法

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

使用MVC的方式,對這個問題進行解析,M---model, V---cell, 所謂的提前計算高度就是在model里將高度計算好,拋一個property出去,在heightForRow方法里取model的時候,直接把height取出來使用。

以下是手碼的偽代碼,直接在這里打的哈,可能不能運行

@interface model : NSObject

@property (nonatomic, assign) CGFloat cellHeight;
@property (nonatomic, copy) NSArray *picArray;
@property (nonatomic, copy) NSString *content;
  • (void)caculateForCellHeight;
    @end

    @implementation model
    
    - (void)caculateForCellHeight
    {
      self.cellHeight = 0;
      if (self.picArray.count > 0) {
           self.cellHeight  += onePicHeight * picRow;
        }
      if (self.content.lenght > 0) {
         UILabel label= [[UILabel alloc] initWithFrame:[在cell里承接centent的cell一樣的尺寸,高可以是任意,寬要和cell里的一樣]];
         label.numberOfLine = 0; // 屬性設(shè)置,如font行數(shù)等等
          CGSize contentSize = [label sizeThatFits:CGSizeMake(label.width, MAXFLOAT)];
         self.cellHeight +=contentSize.height;
      }
    }
    
    @end
    

controller里給model賦值的時候,就直接調(diào)用一次caculateForCellHeight方法,在heightForRow里就可以直接根據(jù)index取出對應(yīng)的model,從model里取出cellHeight,這樣tableview滑動就會降低卡的程度,如果每次都計算的話,會使界面很卡,而且可能會出現(xiàn)跳動

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容