【问题标题】:UITextView attributed text not working when using custom font使用自定义字体时,UITextView 属性文本不起作用
【发布时间】:2016-09-04 08:52:16
【问题描述】:

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

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

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

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

案例 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];
}

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

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

【问题讨论】:

  • NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}];?如果您使用当前代码记录mutAttrTextViewString,您应该看到它没有其余文本的字体(您没有放置粗体字体)并且默认情况下不必获取字体在_textView 中设置纯文本
  • 我确实为文本视图设置了字体,为什么 mutAttrTextViewString 不采用 textView 字体? @Larme
  • 我没有说它应该取代您对mutAttrTextViewString 的全部使用。就是那行NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];。其余的,您继续拨打[mutAttrTextViewString setAttributes:dictBoldText range:rangeBold]; 和另外两条线路。
  • 出于同样的原因:stackoverflow.com/questions/36064762/…(参见 @matt 的 评论)。 fontUITextView 属性是它的 text 属性(通常所说的纯文本),而不是它的 attributedText 属性。
  • 您想将该评论作为答案吗? @Larme 它奏效了。很奇怪,我们需要为可变字符串重新指定属性。

标签: ios uitextview uifont nsmutableattributedstring


【解决方案1】:

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

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];

【讨论】:

    【解决方案2】:

    有一个相关的问题here
    主要问题是UITextViewfont (UIFont) 属性将应用于其text (NSString) 属性(也称为“纯文本”)而不是attributedText (@ 987654328@).

    所以你必须自己将“正常”字体效果应用到你的NSAttributedString

    所以只需替换:

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

    与:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2015-10-17
      • 2012-04-22
      相关资源
      最近更新 更多