次要任务 - 寻找一种干净的方式,以合理的通用方式动态设置表的大小(下面的片段来自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水平。
最后:
在http://pastebin.com/E2pUFRg4完成示例。
谢谢,
DW传递。
答案 0 :(得分:0)
我认为无论如何你需要或多或少地“硬编码”你的字体大小。如果从界面构建器或中心常量文件(甚至代码中)获取它,它总是以某种方式硬编码。
如果您需要区分设备类型(iPhone,iPad)等,您仍然可以根据UI要求使用不同的值。
我通常会为这样的值设置一个中央配置文件。在那里,您还可以“硬编码”您的标准边距值,以及其他单元格标签的字体大小。通常的做法是尽可能动态地计算多少值以减少常量的数量,但仍然需要使用常量来“锚定”这些值。