【iOS開發(fā)細(xì)節(jié)】之-動態(tài)計算UITableviewCell高度

寫在前面的話:

在iOS開發(fā)中,UITableview是我們用到的最多的控件,好多列表類的頁面都需要用表格的形式來寫,在開發(fā)的過程中,我們經(jīng)常會遇到列表中樣式基本一樣,但是會有不同顯示樣式的表,熟悉UITableview的都知道,這時候用UITableview是最合適的,但是每行cell的高度又不一樣,UITableview的代理方法中只有一個返回cell高度的方法,遇到這種情況的時候,我們需要怎么解決呢?今天我就教給大家一個最好的動態(tài)計算cell高度的方法。

UITableview的代理方法中有這樣一個方法:

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

這個方法是返回每一行的cell也就是row的高度的代理方法,平時我們的寫法都是這樣的

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     return   100;
}

這樣寫了以后我們的每一行cell的高度都是固定的100的高度,然而有時候我們并不是只要簡單的這樣的相同的高度,我們需要每一行的cell的高度都不一樣,那有人就會說, 我們直接判斷某一行是某一行,然后給返回不同的高度不就好了,像這樣:

通不過判斷不同的cell返回不同的高度

當(dāng)然你寫出這樣的代碼,我真的不會說什么,如果cell只有5行的時候,你完全可以這樣寫,但是如果cell如果有500行,你也這樣寫么?那你不得寫死在這兒?那為了解決我們不死在鍵盤前,今天就進入我們的正式題目: 動態(tài)計算cell高度

動態(tài)計算cell高度

原理:原理其實很簡單,我們把cell里面每個控件的高度和cell的高度都用模型裝起來,然后讓模型動態(tài)自動計算每個控件的高度,并且動態(tài)得出cell的高度。這樣我們在上面的代理方法中就可以動態(tài)的獲取到cell的高度然后return回去了,空說難理解,直接上代碼

通過cellFrame模型動態(tài)計算cell高度

這里的XMCellFrame就是我創(chuàng)建的模型,里面裝的就是我的cell里面每個控件的frame,包括每個cell的高度,模型貼出來給你們看一下

XMCellFrame.h文件
XMCellFrame.m文件

細(xì)心的同學(xué)可能會發(fā)現(xiàn),我的.h 和.m文件有相同的屬性,兩者不同的是.h是加了只讀的readonly的,.m文件是沒有加readonly屬性的。這里給大家講解一下,為什么要這么寫呢,因為我這個模型里面只涉及到位置frame計算的,然后在引用的地方只是拿來用就行,不希望被別人改動的,所以我加了readonly屬性,在.m中因為你在外面加了readonly屬性,這里當(dāng)我們計算出位置以后需要給每個frame賦值,所以我們要重新聲明屬性才能給賦值,如果不重新聲明,會報錯。

計算frame的代碼如下:
計算frame 01

計算frame 02

計算frame 03

注:在計算frame的模型中,我們有一個數(shù)據(jù)模型,通過重寫數(shù)據(jù)模型的set方法來計算每個控件的frame和cell的height。為什么要在model的set方法中這樣做呢,因為在計算frame的時候有時候是需要拿到數(shù)據(jù)去計算的,比如示例中的desFrame和photosFrame。

那么有人就會問了,那我的cell里面的各個控件的位置怎么賦值呢,別急,在下面

cell各個控件賦值方法

這里我已經(jīng)把基本的注意點和難點都寫出來了,也講明白了,如果你還是看不懂,我把demo給你們,你們下載來充分看一下,你學(xué)會這個方法,對你以后的開發(fā)絕對會有很大的作用,加油!

點擊demo下載

我是妖怪,一個iOS的coder,我沒有多么大的技能,我只能把我知道的和遇到的坑教給你們,希望對你們有所幫助,謝謝!
最后編輯于
?著作權(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)容

  • 概述在iOS開發(fā)中UITableView可以說是使用最廣泛的控件,我們平時使用的軟件中到處都可以看到它的影子,類似...
    liudhkk閱讀 9,299評論 3 38
  • UITableViewCell 父類是UIView UITableView的每一行都是一個UITableViewC...
    翻這個墻閱讀 6,820評論 0 1
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,626評論 30 472
  • 小仙女們好啊 本人是一個學(xué)生馬上高三 寫這個也是因為對這方面很感興趣 希望幫到一些跟我一樣平時沒有太多零花錢又想...
    而后知酒濃閱讀 800評論 0 6
  • 1.你若不勇敢,沒人替你堅強。 2.平凡的腳步也可以走完偉大的行程。 3.自己打敗自己的遠遠多于比別人打敗的。 4...
    維納斯的丘比特閱讀 212評論 0 1

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