我即将使用以下方法在tableview中开发自定义单元格:
http://www.appcoda.com/ios-programming-customize-uitableview-storyboard/
在我开始之前我的担忧如下。
单元格将包含三个标签,在某些情况下标签非常短,在某些情况下标签很长。
这具有的效果是细胞的高度可能会发生很大变化。
无论如何,我可以获得
的细胞高度- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
呼叫
还是有更好的方法来解决我想做的事情。
感谢
答案 0 :(得分:0)
更好的方法是在渲染视图之前计算高度。
例如,您有三个带有以下数据的标签:
我要做的是通过以下方式计算每个字符串的大小:
UIFont *yourFont = // [UIFont ...]
CGSize stringBoundingBox = [someString sizeWithFont:yourFont];
然后我将使用相应数据的键(标题,副标题,描述)将该大小存储在我的数据堆栈中,键将是
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;
}
您可以创建一些常量或方法来获取您将拥有的边距和填充。
这个解决方案的优点在于你将计算一次。但是,如果您对给定项目的数据进行更新,则需要重新计算尺寸并重新加载表格视图。