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

Posted

技术标签:

【中文标题】在 OBJ C 中为给定文本找到正确的字体大小?【英文标题】:Find the correct font size for a given text in OBJ C? 【发布时间】:2017-11-23 16:53:27 【问题描述】:

我有一个 UITableView,它在每个单元格中显示一个 UILabel。每个项目的文本长度各不相同。

[@"Test1",@"Test 245", @Test 568974"]

现在我想确定可以正确适应最大文本的字体大小。在这种情况下,我需要找到 UILabel 的字体大小,它可以正确显示文本 @Test 568974" 而不会被截断。

我尝试过使用

调整FontSizeToFitWidth

属性和设置

自动调整字体

在故事板中以最小字体大小。但这使得每个文本都有不同的字体大小。

怎么做?

【问题讨论】:

【参考方案1】:

我终于找到了解决办法,

-(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】:

NSString 有一个方法sizeWithAttributes:

创建具有所需文本属性的字典,例如:

attrs = [NSDictionary dictionaryWithObject:yourFont forKey: NSFontAttributeName]

并使用上面的方法获取边界矩形。请注意,您需要将返回的小数值舍入为整数值。

这样可以在合理的字体大小之间进行二分搜索以适合您的最大标签。

【讨论】:

【参考方案3】:

要使标签可调整大小添加到界面构建器约束,如下所示: 并为您的表格设置 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];

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

【讨论】:

以上是关于在 OBJ C 中为给定文本找到正确的字体大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DirectWrite 中为倾斜字体获取正确的文本宽度?

如何在 Eclipse 中为所有文本编辑器更改字体大小?

用WORD文档时,如何调整字与字之间的间隙大小

WPF TextBlock 字体调整大小以填充网格中的可用空间

在给定目标打印机的 DPI 的情况下,如何以某种字体计算某些打印文本的大小?

如何在 xcode 7 中为 xcode 8 中的标签添加更多字体大小,它在字体旁边显示“+”符号