動態確定tableViewCell的高度

2021-06-30 16:10:00 字數 1869 閱讀 5316

如果我們的cell的大小是固定的當然是可以在下面的方法裡面寫死

-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath

但是我們的cell往往會根據裡面的內容做調整.由於獲取height的方法實在生成cell之前,一開始的做法是在得到cell的資料時候一併根據資料計算出cell中各個控制項的frame(cell的height當然也出來了),一併傳給cell,計算出來的height用於放到heightforrowatindexpath的方法中去,這樣cell內部的計算方法跑到外面去實現了,封裝不好.現在有一種做法是利用自定義的cell實現乙個類方法,將我們對應cell的資料傳給這個方法,有這個方法計算出我們的table的高

形如:

-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath

這樣就能夠讓cell根據

自己的情況計算出高度來了.

如果我們使用xib來建立cell我們就沒有辦法在類方法中得知cell的一些資訊,這時我們就需要例項化我們的cell,然後把cell的高度返回給cellheight的資料來源

-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath

model *model=self.allarr[indexpath.row];

cell.model=model;

cell.selectionstyle=uitableviewcellselectionstylenone;

return cell.contentview.height;

}

cell.contentview.height值是需要在setmodel裡面根據當前的資料進行修改的.

如果我們實現這樣的乙個效果的話,左邊有乙個固定尺寸的,右邊是乙個有固定寬度和動態高度的uilabel,當我麼label的內容小於高度的時候我們不拉伸cell,並且讓label的垂直居中顯示,當label的值超過高度的時候我們就讓cell的高度拉伸,同事保證label和image位於cell中間的位置.

首先我們明切,我們應該怎樣設定約束,我們會用到什麼約束.

image距離上面的垂直高度,(用於調整image的位置)

image自身的height(用來衡量labei的height)

label的height(初值為1)

label到上,下的距離

整體的高度

以上的值都可以在wakeformnib裡面的到初始的值,

然後根據label的內容計算出heigh,作為乙個變數

height調整label到上,下的距離的約束,(初始值-height/2)

height>=imageheigth

調整label到上,下的距離的約束,(初始值-imageheight/2)

調整image距離上面的垂直高度(初始值+(height-imageheight)/2)

調整整體的高度,(初始值+height-imageght);

調整contentview的高度=整體的高度

具體的情況,會有具體的做法.

指標與動態陣列初步 動態陣列元素個數確定方法

用new操作符為陣列分配記憶體尤其有用,因為陣列的元素個數往往是在程式執行時才能計算得出的 資料結構與物件導向程式設計 c 版 michael main等編著 下面是一部分簡單的 includeusing namespace std int main for int i 0 i num of ele...

python多執行緒之動態確定執行緒數

1 2 建立執行緒,也可以動態確定執行緒數 3 4 encoding utf 856 7import threading 8import time 9import random 1011 12def print time thread name,step 13 python的time.ctime 函...

hive 請不要用動態分割槽(如果分割槽可以確定)

標籤 hive 2014 08 19 16 26 1892人閱讀收藏 舉報 如果分割槽是可以確定的話,千萬不要用動態分割槽,動態分割槽的值是在reduce執行階段確定的.也就是會把所有的記錄distribute by。可想而知表記錄非常大的話,只有乙個reduce 去處理,那簡直是瘋狂的。如果這個值...