iOS中AutoLayout自動佈局,自適應高度

以往我們做cell的自適應的時候都是要寫許多的代碼進行計算高度,而且在適配的時候容易出現問題,費時耗工.那麼下面我們就共同探討一種基於xib的自動計算高度的方法

1.我們先創建tableView,tableView的創建可以使用可視化編程,也可以手寫代碼

2,自定義cell,要求必須使用xib

在cell上添加控件的時候,我們必須確定這個控件的哪個方向上的量是確定的,哪個方向上的量是不確定的

首先我們現在cell的左上角拖一個imageView

我們可以確定imageView只需要通過 它距左 上的距離以及它自身的寬高 這些數值我們可以根據需求直接寫定

接下來就是imageView右側的Label,我們根據上圖可以看出,這個Label的寬度是會發生變化的,那麼我們先將不需要變化的量給定,然後先給需要變化的寬一個預估計值

Label的左側是相對於imageView的距離

那麼我們如何將Label的寬度設爲自適應

點擊Label,然後點擊xcode右側,選擇調整尺度的選項,將需要改變的量前面的"="變爲">="

然後就是下面的Label的自適應,究其原理基本上和上面的這個Label是一樣的

這個Label的上邊是基於imageView,左側右側可以自己根據需求給定數值,寬度是一定的,據下邊的距離是一定的,只有高度需要自適應,設置方法和上面一致,都是改爲">=".由於這個Label顯示的內容可能會出現多行,所以我們需要在將他的行數設置爲0,也就是無限行


2,設置完cell的控件,我們需要將自定義的cell加上標識符,當然,標識符的內容可以自行設置

3.然後我們將自定義的cell裏面的控件與cell進行關聯

4,tableView裏面的設置就是正常的程序,不過在這裏我們需要用註冊的方式進行創建cell

其中紅色箭頭指向的字符串是我們剛纔在自定義cell的時候寫的標識符

黃色箭頭指向的字符串是我們創建的自定義cell的類名,這裏不要寫錯了,不然會出現nib找不到的錯誤提示

在其他的地方的創建就和我們通常寫的tableView的創建方法是一樣的

但是這樣寫是有問題的,因爲如果我們轉動屏幕的時候,我們之前的佈局就會全部變亂,那麼我們應該怎麼做呢

首先,我們先將我們需要自定義高度的Label抽離出來,再創建一個類,基於UILabel,在我們創建的UILabel類中,我們需要重寫一個方法

同時,我們在自定義cell裏面需要自適應高度的Label創建時就應該使用我們定義的UILabel

下面我們要做的就是在tableView裏邊返回行高,在返回行高的方法裏面我們要根據Label裏面的內容進行判斷cell的高度

首先我們現在tableView裏面寫一個自定義cell的屬性

@interface TableViewController ()

@property (nonatomic, strong) MyCell *computCell;

@end
接下來我們需要註冊計算高度的cell,就是我們設置的這個屬性cell


 //註冊計算高度的cell
    self.computCell = [self.tableView dequeueReusableCellWithIdentifier:@"MyCell"];


上面的代碼就是我們返回高度的計算方法,

* 紅色箭頭標註的是我們需要傳入自適應Label裏面的內容,這樣我們就可以根據內容來計算cell的高度

* 接下來的座標,寬度設置,我們使用的是tableView的寬度,因爲我們不需要對其寬度進行自適應,但是後面的高度我們使用的就  是我們自定義的cell的寬度,因爲我們要根據Label的高度來計算整個cell的高度

* 最後返回高度的時候我們使用的是contentView

這樣計算出的自適應高度,當我們旋轉屏幕的時候,我們的cell的整個佈局也不會發生變化

當然,如果我們的cell上的內容要是比這個豐富的話,在我們往cell上拖空間的時候,會比較麻煩,我們只需要確定哪個量是會變化的,哪個量是不會變化的,這樣我們就可以完成自適應.這樣寫,比我們以前的方法要省時間,當然,現在剛開始可能會比較慢






 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章