当字体大小从用于创建它的字体大小减小时,我有一个 NSAttributedString 报告 boundingRectWithSize (以及扩展的 UITextView,它不正确地计算其 sizeThatFits)。
它不会发生在我执行类似操作的所有 NSAttributedStrings 上,所以这里是重现的步骤。
- 使用不包含完整 unicode 字符集的非标准字体。
- 确保字符串包含此“不受支持”集中的字符。iOS 会将它们呈现为适当大小的 Helvetica。
- 在 NSAttributedString 中的所有字体属性上缩小字体。我这样做的代码产生了这个问题,如下所示。
从 UITextView 子类内部:
NSMutableAttributedString *mutableString = [self.attributedText mutableCopy];
[mutableString enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, mutableString.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
if (value) {
UIFont *oldFont = (UIFont *)value;
UIFont *newFont = [oldFont fontWithSize:oldFont.pointSize - 1];
[mutableString removeAttribute:NSFontAttributeName range:range];
[mutableString addAttribute:NSFontAttributeName value:newFont range:range];
}
}];
self.attributedText = [mutableString copy];
我注意到,在while
循环中运行此代码时,会检查 sizeThatFits 以了解文本何时足够小以适合我在某些情况下会发生零竞赛。对于任何小于我开始使用的字体值(恰好是 50 像素),高度都被计算为 60 像素。
当NSLog
ing NSAttributedString 时,我发现有几个属性我没有使用键添加,这些键NSOriginalFont
似乎不在此处支持的属性列表中。NSOriginalFont 是怎么回事?为什么我的尺寸计算不正确?