更好的方法是在渲染視圖之前計算高度。
例如你有三個標籤數據如下:
- 標題
- 字幕
- 說明
我將做什麼是計算每個字符串的大小:
UIFont *yourFont = // [UIFont ...]
CGSize stringBoundingBox = [someString sizeWithFont:yourFont];
我將接着該大小存儲在我的與相應的數據(標題,副標題,描述)的密鑰數據的堆疊,所述密鑰將
- titleSize //爲標題
- 爲subTitleSize //字幕
- descriptionSize
的NSArray中的項目將是這樣的:
@{
@"titleSize" : [NSValue valueWithCGSize:(CGSize)titleSize],
@"subTitleSize" : [NSValue valueWithCGSize:(CGSize)subTitleSize],
@"descriptionSize" : [NSValue valueWithCGSize:(CGSize)descriptionSize],
@"title" : title, //the NSString data
@"subTitle" : subTitle, //the NSString data
@"descriptionSize" : descriptionSize, //the NSString data
}
在這裏你可以有:
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSDictionary *item = stack[indexPath.row];
CGSize titleSize = [item[@"titleSize"] CGSizeValue];
CGSize subTitleSize = [item[@"subTitleSize"] CGSizeValue];
CGSize descriptionSize = [item[@"descriptionSize"] CGSizeValue];
//calculate the correct height and stuff.
...........
return height;
}
你可以創建一些常量或方法來獲得您將會有的邊距和填充。
這個解決方案的美妙之處在於你將會計算一次。但是,如果您的數據更新爲給定項目,您需要重新計算您的大小並重新加載您的tableview。
你需要改變單元格的高度嗎?那是動態高度表嗎? – Balu
理想情況下,一些細胞會很小,很短的文字,其他細胞很長,但是如果我把它們全部放在最大高度,那麼真的很短的那些看起來很空洞,如果這樣做有意義 –
可以將它放到透視圖中,將是2行,長標籤可以是40-50行 –