sizeWithFont 返回随机值
Posted
技术标签:
【中文标题】sizeWithFont 返回随机值【英文标题】:sizeWithFont returning random values 【发布时间】:2012-06-25 08:57:43 【问题描述】:我正在尝试根据内容将是什么来计算表格视图中单元格的必要高度。这是- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
。
但是,有时 sizeWithFont 会返回 0。我不知道这是怎么可能的,因为除了一个之外,所有参数都是硬编码的,而且我可以看到该参数没有改变。
NSString *address = [properties objectAtIndex:1];
CGFloat calculatedSize = [address sizeWithFont:[[UIFont alloc] fontWithSize:15.f] constrainedToSize:CGSizeMake(207.f, 100.f) lineBreakMode:UILineBreakModeWordWrap].height;
NSLog(@"Calculated size for %@: %f", address, calculatedSize);
calculatedSize += 19.f;
return calculatedSize;
如果我通过多次来回查看视图来尝试多次,这是输出:
Calculated size for 1234 Fake St: 0.000000
Calculated size for 1234 Fake St: 0.000000
Calculated size for 1234 Fake St: 0.000000
Calculated size for 1234 Fake St: 38.000000
Calculated size for 1234 Fake St: 0.000000
Calculated size for 1234 Fake St: 38.000000
【问题讨论】:
【参考方案1】:替换:
[[UIFont alloc] fontWithSize:15.0f]
与:
[UIFont systemFontOfSize:15.f]
【讨论】:
好的,这行得通。为什么?为什么[[UIFont alloc] fontWithSize:15.f]
返回变量输出而[UIFont systemFontOfSize:15.f]
不返回?
首先,当你分配一个对象时,你必须初始化它......例如。 [[UIFont alloc] init],但 UIFont 类并非如此。要创建 UIFont 的实例,有一些辅助类方法,例如:-fontWithName:size
、systemFontOfSize
等。有关更多信息,请查看UIFont Class Reference【参考方案2】:
我对此进行了测试,它确实有效
NSString *address = @"Sample text Sample text Sample text Sample text Sample text Sample text Sample text";
CGFloat calculatedSize = [address sizeWithFont:[UIFont systemFontOfSize:15.0]
constrainedToSize:CGSizeMake(207.f, 100.f)
lineBreakMode:UILineBreakModeWordWrap].height;
NSLog(@"Calculated size for %@: %f", address, calculatedSize); //String... 76.000000
【讨论】:
以上是关于sizeWithFont 返回随机值的主要内容,如果未能解决你的问题,请参考以下文章
为啥 UIFont sizeWithFont 在其计算中包含空格?
sizeWithFont:constrainedToSize:lineBreakMode 已弃用