我有一个应用程序,我在表格视图中加载一个大的 plist 文件。这个 plist 文件就像一本书。它包含章节和行。每行都有不同的长度,具体取决于行长,因此我需要自动调整单元格的大小。
我正在使用情节提要和标准表格视图和单元格。单元格样式=基本,单元格标签设置为 text=plain lines=0 linebreaks=wordwrap
到那里为止,将单元格高度调整到适当的大小没有问题。由于单元格高度是在文本插入标签之前定义的,我们必须通过众所周知的使用 CGsize 的方法来完成它,我这样做(它工作正常)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:
(NSIndexPath*)indexPath
{
NSUInteger section = [indexPath section];
NSString *key = [chapters objectAtIndex:section];
NSArray *linesSection = [lines objectForKey:key];
NSString* theText = [linesSection objectAtIndex:indexPath.row];
int labelWidth = LW_CHAPTERINDEX_10;
if (chapters.count < 100){
if (chapters.count < NB_MIN_CHAP){
labelWidth = LABELWIDTH;
} else {
labelWidth = LW_CHAPTERINDEX_10;
}
}
CGSize textSize = [theText sizeWithFont:[UIFont systemFontOfSize:14]
constrainedToSize:CGSizeMake(labelWidth, MAXFLOAT)
lineBreakMode:UILineBreakModeWordWrap];
return textSize.height;
}
问题是取决于索引的硬编码。现在我有3个可能性。
- 无索引
- 数字低于 10 的索引
- 数字低于 100 的索引
在代码中这部分
int labelWidth = LW_CHAPTERINDEX_10;
if (chapters.count < 100){
if (chapters.count < NB_MIN_CHAP){
labelWidth = LABELWIDTH;
} else {
labelWidth = LW_CHAPTERINDEX_10;
}
}
是取决于 3 种可能性的硬编码。
我觉得这很奇怪,特别是如果苹果将开始提供更多不同的屏幕尺寸。
问题
如何在运行时获取索引宽度以确定我的标签宽度?
例如,我想编写类似 screen.width - index-width 来获取标签宽度。
或者任何其他应该允许它是动态的并且不再是静态硬编码的。