次要任务 - 寻找一种干净的方式以合理通用的方式动态设置表格的大小(下面的片段来自http://pastebin.com/E2pUFRg4)。
现在我想像
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *text = [items objectAtIndex:[indexPath row]];
CGSize constraint = CGSizeMake(self.view.bounds.size.width-24.f, CGFLOAT_MAX);
UITableViewCell * cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
CGSize size = [text sizeWithFont:cell.textLabel.font
constrainedToSize:constraint
lineBreakMode:UILineBreakModeWordWrap];
CGFloat height = MAX(size.height + 12.f, tableView.rowHeight);
return height;
}
会很好地削减它。但不幸的是,在第一次调用 tableView:heightForRowAtIndexPath 时:textlabel 上的字体大小设置为 0(否则设置字体本身)。它只会在第一次抽签后被填充到一些合理的东西上。
所以我发现自己不得不将其更改为:
....
UIFont * font = cell.textLabel.font;
if (font.pointSize == 0)
font = [UIFont systemFontOfSize:20];
CGSize size = [text sizeWithFont:font
constrainedToSize:constraint
lineBreakMode:UILineBreakModeWordWrap];
.....
这可以解决问题。但是现在我们突然有一个硬编码的字体大小假设为 20。这很糟糕。
所以我现在的问题是
- 有什么办法可以防止这种情况?即硬编码这么多?
我还猜测 X 和 Y 边界/插图为 2x6 垂直和 2x12 水平。
- 有什么方法可以动态地或从常量中学习(以使其接近 iPhone 和 iPad-UIPopover 视图上的正确默认值)?
最后:
- 建议以更清洁的方式执行此操作 - 这也允许考虑 detailLabel 或类似的额外字段。
在http://pastebin.com/E2pUFRg4上完成示例。
谢谢,
德。