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