ios - UILabel外观字体和属性字符串字体

标签 ios objective-c uilabel nsattributedstring uiappearance

在我的应用程序中,我将全局自定义字体应用于所有标签,如下所示:

UIFont *font = [UIFont fontWithName:kMyFontName size:15.0]; 
[[UILabel appearance] setFont:font];

这很好用。但是,在某些情况下,我希望能够为 UILabel 字符串的特定区域指定不同的字体。

所以我有这样的东西:

NSString *string = @"Foo Bar Baz";
UIFont *boldFont = [UIFont fontWithName:kMyBoldFontName size:15.0]; 
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string];
[attrString setAttributes:@{ NSFontAttributeName: boldFont } range:NSMakeRange(0, 3)];
self.myLabel.attributedText = attrString;

但是这似乎不起作用。我希望“Foo”是粗体,但整个字符串只有默认字体。就好像粗体根本没有应用,而是被 UILabel 外观代理上设置的字体覆盖。

当我删除 UILabel 外观行时,它工作正常(我可以看到部分字符串以粗体显示)。基本上我想将我的自定义字体应用于标签,但将单独的字体应用于字符串的不同区域。通常这对属性字符串可以正常工作,但由于某些原因设置 UILabel 外观字体会禁用此功能(或看起来如此)。

  • 预期结果:“Foo Bar Baz”
  • 实际结果:“Foo Bar Baz”

如果我删除 [[UILabel appearance] setFont:] 行然后它工作:

  • Foo Bar Baz”

(但自定义字体未在字符串的其余部分设置)。

所以我的问题是:有没有一种方法可以指定一种字体用作应用程序范围内的默认字体,但仍然能够使用属性字符串部分覆盖它?

此外,如果有人可以向我解释为什么这不起作用,我将不胜感激。

最佳答案

在设置属性字符串之前将 font 和 textColor 设置为 nil。

关于ios - UILabel外观字体和属性字符串字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028631/

相关文章:

ios - 构建应用程序时找不到 Cocoapods header

iphone - 如何通过蓝牙获取附近ios设备的信息

ios - iPhone/iPad的UILabel如何设置粗体和斜体?

ios - 我怎样才能访问图层以便翻转它?

影响加载时间的 iOS 链接框架?

ios - 通过 iPhone App 连接到特殊的 Wi-Fi 网络

iOS 有一种方法可以将本地化字符串分配给 IB/ Storyboard中的 UILabel

ios - 如何获取特定区域的uitextview文本

ios - 以编程方式检索 iPhone 上的内存使用情况

iphone - 计算 UILabel 和 UIButtons 的大小来造句?