表中每個單元格的高度隨着該單元格的內容多少而變化。尤其內容不止是文字的時候
其實要實現這個功能很簡單。
首先所謂的動態分配單元格高度只是效果上看起來是這樣,其實還是跟我們平常設置
單元格高度一樣,每行先分配高度。
這裏就一個demo來說說吧
要實現這個功能其實最重要的就是下面的兩個方法
1、//設置行高
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *text = .......;
//這裏的text具體內容就是你要在單元格上顯示的內容
CGSize constraint = CGSizeMake(300, 2000.f);
//先設置一個約束,這個是爲了在寬度一定的時候計算text內容所佔視圖的大小
//高度儘量設的大一下,因爲你不確定text具體內容有多少
CGSize size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
//這裏利用NSString的一個方法來計算text所佔大小,
//感謝NSString爲我們封裝了這個方法,使得這個功能得以實現
CGFloat height = MAX(size.height,40.0f);
//這裏是爲了給單元格高度設置一個最低限度
}
2、//配置每個單元
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UILabel *textLabel = nil;
//先創建一個用於顯示文字的label,當然也可以用其他的,
static NSString *cellIndentifier = @"indentifier";
//爲單元格創建一個專屬標籤
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIndentifier];
//先搜索緩衝區看有沒有專屬標籤的cell
if (cell == nil) {
//如果沒有那麼就創建一個
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
//把標籤初始化
textLabel = [[UILabel alloc]initWithFrame:CGRectZero];
textLabel.font = [UIFont systemFontOfSize:14];
textLabel.tag = 1;
//這裏設置tag值以便以後調用
//將label添加到cell
[[cell contentView]addSubview:textLabel];
}
NSString *text = ......;
//同上面的
CGSize constraint = CGSizeMake(300, 2000.f);
CGSize size= [text sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:constraint lineBreakMode:NSLineBreakByClipping];
if (!textLabel) {
textLabel = (UILabel *)[cell viewWithTag:1];
}
//如果label是空的那就通過tag值調用
textLabel.frame = CGRectMake(10, 10, 300, size.height);
//通過text內容所佔size的設置label所顯示在的區域
return cell;
}
功能核心也就是以上兩個方法,是不是很簡單?當然這只是純文字,要是還混合有圖片呢?
其實原理是一樣的,UIImage 也有個屬性 size ,說了這個你應該就知道該怎麼辦了吧?
好了就到這裏,後面附上我做的一個關於圖片的demo,若是還不懂可以跟我討論一下。
這是這個demo的截圖,可以看一下效果
這個demo的鏈接:http://download.csdn.net/detail/u012884714/6795293
自己遇到了這個問題,然後查資料實現了這個功能,在這裏跟大家分享了 —— LC