UITableView滑動時cell出現(xiàn)后又消失的bug

現(xiàn)象:

tableView正?;瑒?,某個cell正常出現(xiàn)在屏幕中,然后又突然消失了(此時cell并未劃出屏幕),然后等cell消失后的空白區(qū)域劃出屏幕后,再次劃回來,就沒問題了,只有第一次加載會出現(xiàn)。

原因:

在cell加載的時候做了耗時操作。

詳細(xì)說明:

cellForRowAtIndexPath:方法中,我們一般也會進(jìn)行賦值操作,如果在這個時候做了一些耗時的操作,就會導(dǎo)致cell消失的現(xiàn)象。

我的情況是,cell里邊又添加了一個collectionView,然后每個collectionView的cell有一個title,這個title后端傳的是html格式的富文本,需要先轉(zhuǎn)成NSAttributeString再進(jìn)行賦值顯示。

雖然以前也經(jīng)常這么用,但以前基本上都是一兩個label用html文本,所以沒問題,這次是cell里邊嵌套collection,collection里邊有7個cell,轉(zhuǎn)化的次數(shù)增多了,耗時也增加了,就導(dǎo)致了這個問題。

之所以之后就顯示正常了,是因為我在model里增加了個xxxAttr屬性,懶加載attributeString,之后cell再次復(fù)用,不用重新生成了,所以就沒問題了。錯誤示范:

-(NSAttributedString *)titleAttr{
    if (!_titleAttr) {
        NSMutableAttributedString *attrStr = [NSMutableAttributedString stringWithHTMLString:_title];
        attrStr.yy_font = [UIFont pingFangMedium:15];
        _titleAttr = attrStr;
    }
    return _titleAttr;
}

我這種情況的解決辦法是,在請求的回調(diào)中,在JSON轉(zhuǎn)Model之后,就直接生成這些屬性字符串,這樣問題就解決了。

順便一說,如果你用的JSON轉(zhuǎn)模型的第三方是MJExtension的話,當(dāng)字典轉(zhuǎn)模型完畢時會調(diào)用mj_keyValuesDidFinishConvertingToObject這個方法,所以上邊的操作可以放到這里實現(xiàn)。示例如下:

- (void)mj_keyValuesDidFinishConvertingToObject{
   NSMutableAttributedString *attrStr = [NSMutableAttributedString stringWithHTMLString:_title];
   attrStr.yy_font = [UIFont pingFangMedium:15];
   _titleAttr = attrStr;
}

當(dāng)然,不排除其他地方的耗時操作也會導(dǎo)致這個問題。

?著作權(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)容