如果我們的cell的大小是固定的當然是可以在下面的方法裡面寫死
但是我們的cell往往會根據裡面的內容做調整.由於獲取height的方法實在生成cell之前,一開始的做法是在得到cell的資料時候一併根據資料計算出cell中各個控制項的frame(cell的height當然也出來了),一併傳給cell,計算出來的height用於放到heightforrowatindexpath的方法中去,這樣cell內部的計算方法跑到外面去實現了,封裝不好.現在有一種做法是利用自定義的cell實現乙個類方法,將我們對應cell的資料傳給這個方法,有這個方法計算出我們的table的高-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath
形如:
這樣就能夠讓cell根據-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath
自己的情況計算出高度來了.
如果我們使用xib來建立cell我們就沒有辦法在類方法中得知cell的一些資訊,這時我們就需要例項化我們的cell,然後把cell的高度返回給cellheight的資料來源
cell.contentview.height值是需要在setmodel裡面根據當前的資料進行修改的.-(cgfloat)tableview:(uitableview *)tableview heightforrowatindexpath:(nsindexpath *)indexpath
model *model=self.allarr[indexpath.row];
cell.model=model;
cell.selectionstyle=uitableviewcellselectionstylenone;
return cell.contentview.height;
}
如果我們實現這樣的乙個效果的話,左邊有乙個固定尺寸的,右邊是乙個有固定寬度和動態高度的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 去處理,那簡直是瘋狂的。如果這個值...