ios - 使用自定义字体时 UITextView 属性文本不起作用

标签 ios uitextview uifont nsmutableattributedstring

我正在使用 UITextView 并通过代码设置其字体和属性文本。

情况 1: 自定义字体 - 是属性文本 - 否

enter image description here

textView 文本以自定义字体显示。

我想要带有自定义字体的属性文本,即 Message : 在这种情况下应该加粗。

情况 2: 自定义字体 - 是属性文本 - 是

enter image description here

只有属性文本(粗体文本)以自定义字体显示。

我的代码是:

- (void)loadTextView
{
    _textView.text=NSLocalizedString(@"more_info_text",nil);
    _textView.font=[UIFont fontWithName:@"BurbankSmall-Medium" size:16];

    NSRange rangeBold  = [_textView.text rangeOfString:@"Examples of invalid characters:"];
    NSRange rangeBold2 = [_textView.text rangeOfString:@"Restricted text:"];
    NSRange rangeBold3 = [_textView.text rangeOfString:@"Message :"];

    UIFont *fontText = [self boldFontWithFont:_textView.font];
    NSDictionary *dictBoldText = [NSDictionary dictionaryWithObjectsAndKeys:fontText, NSFontAttributeName, nil];

    NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];
    [mutAttrTextViewString setAttributes:dictBoldText range:rangeBold];
    [mutAttrTextViewString setAttributes:dictBoldText range:rangeBold2];
    [mutAttrTextViewString setAttributes:dictBoldText range:rangeBold3];

    [_textView setAttributedText:mutAttrTextViewString];

    _textView.editable=NO;
    _textView.selectable=NO;
}

- (UIFont *)boldFontWithFont:(UIFont *)font
{
    UIFontDescriptor * fontD = [font.fontDescriptor
                                fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold];
    return [UIFont fontWithDescriptor:fontD size:16];
}

当我注释行 setAttributedText:mutAttrTextViewString 时,一切都以自定义字体显示。当我取消注释时,只有属性文本以自定义字体显示,其余以默认字体显示。

为什么会这样?如果这不可能,我正在考虑将 html 内容包含为属性文本,但我想在最坏的情况下将其视为一种选择。

最佳答案

有个相关问题here .
主要问题是 UITextViewfont (UIFont) 属性将应用于其 text (NSString) 属性(也称为“纯文本”),不适用于 attributedText (NSAttributedString)。

因此您必须自己将“正常”字体效果应用于您的 NSAttributedString

所以只需替换:

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];

与:

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}];

关于ios - 使用自定义字体时 UITextView 属性文本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120535/

相关文章:

uifont - Helvetica Neue 粗体标识符

iphone - NSAttributedString 在不改变 pointSize 的情况下将样式更改为粗体?

iphone - 如何在iOS应用程序中加载FNT格式的字体

ios - seacrhDisplayController 中的搜索栏颜色不准确

ios - 如何防止键盘出现在自定义警报 View 上

ios - 双击 uitextview

iphone - 如何在同一个 UITextField 或 UITextView 中保留两种不同的字体?

ios - Xcode iOS Simulator 不加载新项目

ios - Tiled - 支持不同的ios设备

ios - 将 FDLIBM 库集成到 iOS