【发布时间】:2012-09-12 17:00:33
【问题描述】:
我有一个应用程序,可以在表格视图中加载一个大型 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 的程序来获取标签宽度。
或者任何其他应该允许它是动态的并且不再是静态硬编码的。
【问题讨论】:
-
textSize.width 和 textSize.heigth+10 是 label.frame.size
-
然后?我的意思是这取决于我硬编码的 labelWidth 并且我希望 labelWidth 是动态确定的
-
它将根据您的文本大小动态确定以适应uilabel。
-
王子 对不起,我不明白你的意思。对我来说,要确定我需要使用 CGSize 的文本大小,它要求我有标签的宽度。除非我知道 sectionIndex 大小,否则我不知道这个大小。也许你可以给我一个“答案”,告诉我我将使用的代码。谢谢
标签: ios uitableview indexing cell autoresize