-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:而不是。