天天看點

iOS中AutoLayout自動布局,自适應高度

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

1.我們先建立tableView,tableView的建立可以使用可視化程式設計,也可以手寫代碼

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

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

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

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

iOS中AutoLayout自動布局,自适應高度

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

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

iOS中AutoLayout自動布局,自适應高度

那麼我們如何将Label的寬度設為自适應

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

iOS中AutoLayout自動布局,自适應高度

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

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

iOS中AutoLayout自動布局,自适應高度

2,設定完cell的控件,我們需要将自定義的cell加上辨別符,當然,辨別符的内容可以自行設定

iOS中AutoLayout自動布局,自适應高度

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

iOS中AutoLayout自動布局,自适應高度

4,tableView裡面的設定就是正常的程式,不過在這裡我們需要用注冊的方式進行建立cell

其中紅色箭頭指向的字元串是我們剛才在自定義cell的時候寫的辨別符

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

iOS中AutoLayout自動布局,自适應高度

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

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

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

iOS中AutoLayout自動布局,自适應高度

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

iOS中AutoLayout自動布局,自适應高度

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

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

@interface TableViewController ()

@property (nonatomic, strong) MyCell *computCell;

@end
           

接下來我們需要注冊計算高度的cell,就是我們設定的這個屬性cell

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

           
iOS中AutoLayout自動布局,自适應高度

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

* 紅色箭頭标注的是我們需要傳入自适應Label裡面的内容,這樣我們就可以根據内容來計算cell的高度

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

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

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

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