-fontWithSize返回不同的字体对象
更新1
我发现了一个解决方法:
// instead of font = [font fontWithSize:pointSize]; // i can do this and get the correct font back font = [UIFont fontWithName:font.fontName size:pointSize]
我正在使用Nick Lockwood的HTMLLabel类将HTML转换为一个尊重HTML中样式的NSAttributedString。 在大多数情况下,它的效果很好。
但是,我在我的应用程序中使用自定义字体,出于某种原因,我的字体总是以粗体显示。 我没有使用系统字体这个问题。 我把它缩小到这个方法:
- (UIFont *)font { // ** Code Path 1 ** UIFont *font = _styles[HTMLFont]; if ([font isKindOfClass:[NSString class]]) { font = [UIFont fontWithName:(NSString *)font size:17.0f]; } NSInteger pointSize = [_styles[HTMLTextSize] floatValue] ?: font.pointSize; if (self.bold) { if (self.italic) { font = [font boldItalicFontOfSize:pointSize]; } else { font = [font boldFontOfSize:pointSize]; } } else if (self.italic) { font = [font italicFontOfSize:pointSize]; } else { // ** Code Path 2 ** font = [font fontWithSize:pointSize]; } return font; }
这种方法被多次调用。 在第一次迭代期间,如果我在Code Path 1
和日志font
设置断点,我得到我期望的:
font-family: "Fort-Book"; font-weight: bold; font-style: normal; font-size: 18.00pt
但是,如果我在Code Path 2
之后注销font
,我会得到:
font-family: "Fort"; font-weight: bold; font-style: normal; font-size: 18.00pt
不知何故,通过调用-fontWithSize:
,我的字体从Fort-Book
变为常规Fort
。
fontWithSize
的文档清楚地说明:
返回与接收器相同但具有指定大小的字体对象。
为什么我要找回另一个字体对象?
事实certificate这是iOS 8.3中的一个错误(可能更早)。
我提交了一个雷达(#21540510)。
你可以在这里看到: https : //github.com/djibouti33/UIFontBug
在此期间,如果您遇到-fontWithSize
问题,请使用+fontWithName:size:
而不是。