我有一个UITableView,在每个单元格中显示UILabel。文本长度因每个项目而异。
[@“Test1”,@“Test 245”,@ Test 568974“]
现在我想确定可以正确放入最大文本的字体大小。在这种情况下,我需要找到UILabel的字体大小,可以正确显示文本@Test 568974“没有任何截断。
我尝试过使用
adjustsFontSizeToFitWidth
属性并设置
在具有最小字体大小的故事板中自动调整字体
。但这会使每个文本具有不同的字体大小。
怎么做?
答案 0 :(得分:0)
NSString
有一个方法sizeWithAttributes:
创建具有所需文本属性的字典,例如:
attrs = [NSDictionary dictionaryWithObject:yourFont forKey: NSFontAttributeName]
并使用上面的方法获取边界矩形。请注意,您需要将返回的小数值舍入为整数值。
使用它可以在合理的字体大小之间进行二进制搜索,以适合您最大的标签。
答案 1 :(得分:0)
我终于找到了解决方案,
-(CGFloat)findFontSizeforLabel:(UILabel*)label{
CGFloat minFontSize = 22;
for(Product *product in products){
CGFloat fontSize = 22.0;
while(fontSize > 0){
NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"fontname" size:fontSize]};
CGSize size = [product.title sizeWithAttributes:attributes];
if(size.width < label.frame.size.width - 15){
if(fontSize < minFontSize){
minFontSize = fontSize;
}
break;
}
fontSize--;
}
}
return minFontSize;
}
答案 2 :(得分:0)
要使标签可调整大小,请添加到接口构建器约束,如下所示: 并为你的表rowHeight设置为Automatic和estimatedRowheight超过45:
tableView.estimatedRowHeight = 50
tableView.rowHeight = UITableViewAutomaticDimension
这使您的单元格调整标签高度。 如果要以编程方式获取标签高度,请使用:
NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14]};
CGRect rect = [textToMeasure boundingRectWithSize:label.frame.size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
这为您提供了给定标签大小和属性的大小文本