【发布时间】:2014-09-21 14:40:26
【问题描述】:
在我的应用中,我将全局自定义字体应用于所有标签,如下所示:
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巴兹”
(但字符串的其余部分没有设置自定义字体)。
所以我的问题是:有没有办法指定单一字体用作应用范围内的默认字体,但仍然可以使用属性字符串部分覆盖它?
另外,如果有人可以向我解释为什么这不起作用,我将不胜感激。
【问题讨论】:
-
定义“不起作用”。实际发生了什么?
-
@rmaddy 很抱歉,我已经用更多细节更新了我的问题。如果还不清楚,请告诉我。
-
只是作为一个测试,尝试做:
self.myLabel.font = nil;. -
@rmaddy 有趣的建议,但这似乎不起作用。
-
你检查自定义字体是否支持粗体,因为某些字体不支持粗体?
标签: ios objective-c uilabel nsattributedstring uiappearance