在OBJ C中找到给定文本的正确字体大小?

时间:2017-11-23 16:53:28

标签: ios objective-c uilabel uifont

我有一个UITableView,在每个单元格中显示UILabel。文本长度因每个项目而异。

  

[@“Test1”,@“Test 245”,@ Test 568974“]

现在我想确定可以正确放入最大文本的字体大小。在这种情况下,我需要找到UILabel的字体大小,可以正确显示文本@Test 568974“没有任何截断。

我尝试过使用

  

adjustsFontSizeToFitWidth

属性并设置

  

自动调整字体

在具有最小字体大小的故事板中

。但这会使每个文本具有不同的字体大小。

怎么做?

3 个答案:

答案 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)

要使标签可调整大小,请添加到接口构建器约束,如下所示: enter image description here 并为你的表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];

这为您提供了给定标签大小和属性的大小文本