使用自定义字体时 UITextView 属性文本不起作用
UITextView attributed text not working when using custom font
我正在使用 UITextView
并通过代码设置其字体和属性文本。
案例 1:自定义字体 - 是,属性文本- 否
textView 文本以自定义字体显示。
我想要带有自定义字体的属性文本,即 消息 : 在这种情况下应该加粗。
案例 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
时,一切都以自定义字体显示。当我取消注释时,只有属性文本以自定义字体显示,其余以默认字体显示。
为什么会这样?如果这不可能,我正在考虑将 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
) 属性(也称为 "plain text")而不是 attributedText
(NSAttributedString
)。
所以您必须自己将 "normal" 字体效果应用到 NSAttributedString
。
所以只需替换:
NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];
与:
NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}];
我正在使用 UITextView
并通过代码设置其字体和属性文本。
案例 1:自定义字体 - 是,属性文本- 否
textView 文本以自定义字体显示。
我想要带有自定义字体的属性文本,即 消息 : 在这种情况下应该加粗。
案例 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
时,一切都以自定义字体显示。当我取消注释时,只有属性文本以自定义字体显示,其余以默认字体显示。
为什么会这样?如果这不可能,我正在考虑将 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
) 属性(也称为 "plain text")而不是 attributedText
(NSAttributedString
)。
所以您必须自己将 "normal" 字体效果应用到 NSAttributedString
。
所以只需替换:
NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text];
与:
NSMutableAttributedString *mutAttrTextViewString = [[NSMutableAttributedString alloc] initWithString:_textView.text attributes:@{NSFontAttributeName:[UIFont fontWithName:@"BurbankSmall-Medium" size:16]}];