0

所以,

在 中sizeWithFont:minFontSize:actualFontSize,我们传递了一个 actualFontSize 的指针,然后可以使用它来缩小标签内的字体。如:

[s sizeWithFont:self.font
                minFontSize:minimumScaleFactor
                actualFontSize:&actualFontSize
                    forWidth:width
                lineBreakMode:lineBreakMode];

所以现在,我们可以self.frame.font.pointSize = actualSize修改字体大小了。我的问题是:现在 sizeWithFont 已被弃用,我该如何取回这个指针?

基本上,替换它的推荐方法是boundingRectWithSize

[s boundingRectWithSize:CGSize(width,CGFLOAT_MAX)
                options:(NSStringDrawingUsesLineFragmentOrigin)
                attributes://An NSDictionary with font
                context:nil];

但如您所见,它只返回大小。我想过做类似的事情:

changeInFontSize = (newSize.height - oldSize.height) + (newSize.width - oldSize.width)
                   -------------------------------------------------------------------
                                                  2

但这并没有真正给我想要的答案。有人可以帮助我如何做到这一点吗?准确地说-我需要字体大小的差异来更改当前的字体大小!

4

1 回答 1

1

问题是该sizeWithFont方法会根据需要减小字体大小。那么如果函数使用较小的字体大小,你怎么知道它使用的字体大小呢?那是actualFontSize为了!!从文档中:

尽管它会计算出现换行符的位置,但此方法实际上并未将文本换行到其他行。如果整个字符串不适合使用初始字体大小的给定宽度,则此方法会减小字体大小,直到字符串适合或达到指定的最小字体大小。

新推荐的方法boundingRectWithSize不会减小字体大小。因此,如果函数不减小 fonsize,也就是说,它将使用您在 中指定的大小attributes,则无需返回实际使用的大小(因为它正是您指定的大小,因此,您已经知道了)。

编辑:
如果要计算适合某些预定义边界框所需的字体大小,则需要使用一些点大小进行测试并计算最适合的字体大小。检查此链接以获取一些示例(链接上的最后一个答案看起来很有趣以优化效率)

于 2014-03-03T21:18:57.617 回答