Ios UITextView属性化文本在使用自定义字体时不起作用

Ios UITextView属性化文本在使用自定义字体时不起作用,ios,uitextview,uifont,nsmutableattributedstring,Ios,Uitextview,Uifont,Nsmutableattributedstring,我使用的是UITextView,并按代码设置其字体和属性文本 案例1:自定义字体-是,属性文本-否 文本视图文本以自定义字体显示 我希望使用自定义字体的属性文本,即消息:,在这种情况下,应以粗体显示 案例2:自定义字体-是,属性文本-是 只有属性文本(粗体文本)以自定义字体显示 我的密码是: - (void)loadTextView { _textView.text=NSLocalizedString(@"more_info_text",nil); _textView.fon

我使用的是
UITextView
,并按代码设置其字体和属性文本

案例1:自定义字体-是,属性文本-否

文本视图文本以自定义字体显示

我希望使用自定义字体的属性文本,即消息:,在这种情况下,应以粗体显示

案例2:自定义字体-是,属性文本-是

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

我的密码是:

- (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];
}
当我注释行
setAttributeText:mutatrTextViewString
时,所有内容都以自定义字体显示。取消注释时,只有属性文本以自定义字体显示,其余文本以默认字体显示


为什么会这样?如果这是不可能的,我想把HTML内容作为属性文本,但是我想把它看作是最坏情况下的选项。

,而不是将字体设置在属性文本之外,尝试在属性字符串内同时设置所有字体更改:

NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];
[mutAttrTextViewString setAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16] range:NSMakeRange(0, _textView.text.length)];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold2];
[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold3];

[_textView setAttributedText:mutAttrTextViewString];

还有一个相关的问题。
主要问题是
UITextView
font
UIFont
)属性将应用于其
text
NSString
)属性(也称为“纯文本”),而不是应用于
attributedText
nsattributedtributedstring

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

因此,只需替换:

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


nsmutableAttributeString*mutatrTextViewString=[[nsmutableAttributeString alloc]initWithString:_textView.text属性:@{NSFontAttributeName:[UIFont fontWithName:@“Burbanksmill”size:16]}]?如果您使用当前代码记录
mutatrTextViewString
,您应该会看到它没有用于文本其余部分的字体(您没有使用粗体字体),并且默认情况下不必获取在
\u textView
中为纯文本设置的字体。我为文本视图设置了字体,为什么mutatrTextViewString不采用textView字体@LarmeI没有说它应该取代您对
mutatrTextViewString
的全部使用。只是那一行
NSMutableAttributedString*mutatrTextViewString=[[NSMutableAttributedString alloc]initWithString:_textView.text]。对于其余部分,继续调用
[mutatrTextViewString setAttributes:dictBoldText-range:rangeBold]和另外两行。出于相同的原因:(见@matt的评论)<代码>字体
UITextView的属性
用于它的
文本
属性(通常称为纯文本),而不是它的
属性文本
属性。是否将该注释作为答案@Larme成功了。很奇怪,我们需要为可变字符串再次指定属性。
NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}];