7

我有一个字体大小为 17 的 UILabel。如果我调用 label.font.pointSize 我得到 17,这很好。BBUUUUTTT 我也将最小字体大小设置为 8,现在如果我在标签中填入一些导致点大小缩小的文本,然后调用 label.font.pointsize 我仍然得到 17,即使我知道点大小更小

任何想法如何在系统调整字体大小后获得真实的点大小?

4

3 回答 3

4

我不知道在缩小内容时获取 UILabel 的当前点大小的 API。sizeWithFont您可以尝试使用API来近似“缩放因子” 。

只是一个想法:

// Get the size of the text with no scaling (one line)
CGSize sizeOneLine = [label.text sizeWithFont:label.font];

// Get the size of the text enforcing the scaling based on label width
CGSize sizeOneLineConstrained = [label.text sizeWithFont:label.font constrainedToSize:label.frame.size];

// Approximate scaling factor
CGFloat approxScaleFactor = sizeOneLineConstrained.width / sizeOneLine.width;

// Approximate new point size
CGFloat approxScaledPointSize = approxScaleFactor * label.font.pointSize;
于 2013-06-04T16:33:21.563 回答
2

正如 savner 在评论中指出的那样,这是一个重复的问题。在这里找到最干净的解决方案:如何获取 UILabel (UITextView) 自动调整字体大小?. 但是,Sanjit 的解决方案也有效!谢谢大家!

CGFloat actualFontSize;
[label.text sizeWithFont:label.font
         minFontSize:label.minimumFontSize
      actualFontSize:&actualFontSize
            forWidth:label.bounds.size.width
       lineBreakMode:label.lineBreakMode];
于 2013-06-04T21:16:41.807 回答
1

@Sanjit Saluja 回答的Swift 4iOS 7+版本(sizeWithFont现已弃用):

// Get the size of the text with no scaling (one line)
let sizeOneLine: CGSize = label.text!.size(withAttributes: [NSAttributedStringKey.font: label.font])

// Get the size of the text enforcing the scaling based on label width
let sizeOneLineConstrained: CGSize = label.text!.boundingRect(with: label.frame.size, options: .usesLineFragmentOrigin, attributes: [NSAttributedStringKey.font: label.font], context: nil).size

// Approximate scaling factor
let approxScaleFactor: CGFloat = sizeOneLineConstrained.width / sizeOneLine.width

// Approximate new point size
let approxScaledPointSize: CGFloat = approxScaleFactor * label.font.pointSize
于 2017-10-05T10:42:54.320 回答