cell行高的動態(tài)計(jì)算

UITableView控件是我們?nèi)粘i_發(fā)中經(jīng)常使用的控件之一,cell動態(tài)高度的計(jì)算也是老生常談的問題,我們一般計(jì)算高度的方法都是,cell中得各個(gè)控件的高度計(jì)算出來,然后給外界拋出一個(gè)接口,用來獲取cell高度,但是tableView返回高度的代理方法,總是頻繁的調(diào)用,我們還要注意不要在主線程使用過于復(fù)雜的算法以免阻塞主線程.

  1. 預(yù)加載
    蘋果在iOS7之后給我們新增一個(gè)API
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0);

下面我們先來了解一下tableView計(jì)算高度的機(jī)制.
tableView在渲染之前會不停的調(diào)用heightForRowAtIndexPath方法返回對應(yīng)cell高度,然后得到tableView的總高度,這意味在顯示tableView之前需要進(jìn)行大量的高度計(jì)算(這不是一屏,是計(jì)算所有數(shù)據(jù)的高度,并且是在主線程,很有可能會造成加載過慢,卡頓等現(xiàn)象)。有人問為什么不能等頁面滑動到某個(gè) cell 的時(shí)候,再計(jì)算高度呢?答案就是,tableView有一個(gè)小的ScrollIndicator滾動條,高度是用來確定滾動條的大小和位置的。
estimatedHeightForRowAtIndexPath這個(gè)方法的意思就是返回一個(gè)cell 高度的估計(jì)值,這樣tableView就直接取估值用來確定滾動條的信息而不需要調(diào)用多次算高的代理方法,這樣就可以大幅度提高tableView的加載速度。

需要注意的是:1.它是IOS7之后才有的API。2.如果你的業(yè)務(wù)需求需要你一開始使用到tableView的contentSize或者contentOffset,那么請慎用。
2.autoLayout自動算高
參考:https://my.oschina.net/hantianyu/blog/516244

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

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

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,213評論 3 119
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,675評論 1 32
  • 周圍誰又突然戀愛了,誰又宣布分手了,誰即將步入婚姻殿堂,誰的婚姻還沒開始就看到了結(jié)尾……信息便利快節(jié)奏的社會里,這...
    惑然閱讀 3,119評論 2 5
  • 1. 數(shù)組字面量 2. 長度 lenght 3. 刪除 splice() 4. 枚舉 for循環(huán) 5. 容易混淆的...
    __越過山丘__閱讀 244評論 0 0
  • 題記 近來,突然萌生了對設(shè)計(jì)風(fēng)格進(jìn)行歸納學(xué)習(xí)的想法,試著設(shè)計(jì)了幾個(gè)專題,其中之一便是關(guān)于日本的極簡設(shè)計(jì)風(fēng)格。 研究...
    守望一片麥田閱讀 1,258評論 0 0

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