gpt4 book ai didi

ios - NSDocumentTypeDocumentAttribute 不适用于 NSFontAttributeName

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:37 24 4
gpt4 key购买 nike

故事

应用程序接收带有在 CMS 中编辑的 html 标签的字符串。应用程序接收该字符串并放入 UILabel。不久前,html 标签被添加到这个字符串中。显然带有 html 标签的字符串在站点中看起来不错。

我进行了调查,发现我们可以为 UILabel 使用属性字符串。

//attributes dictionary
NSDictionary *attrs =
@{
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
};

NSAttributedString* attrString = [[NSAttributedString alloc] initWithData:[textString dataUsingEncoding:NSUnicodeStringEncoding]
options:attrs
documentAttributes:nil
error:nil];

好的,现在标签已启用。但是我丢失了字体,文本看起来像...默认的 html 文本!该字符串从 css 获取字体,但我收到带有 html 标签的裸字符串。只需将 NSFontAttributeName: [UIFont systemFontOfSize:10.f] 添加到 attrs 字典。但没有任何成功。

我第二次尝试使用 NSMutableAttributedString:

//attributes dictionary
NSDictionary *attrs =
@{
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
};

NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithData:[textString dataUsingEncoding:NSUnicodeStringEncoding]
options:attrs
documentAttributes:nil
error:nil];
//and set font later
[attrString setAttributes:@{NSFontAttributeName:font} range:NSMakeRange(0, attrString.length)];

现在我得到了没有任何 html 标签的标签,但这最后一步覆盖了标签的所有更改(粗体、斜体等)。

问题

我们如何在属性字符串中使用 html 标签,但为它们设置我们的字体?

最佳答案

我也在寻找这个问题的解决方案。到目前为止,我通过使用以下代码解决了这个问题。在这里我知道 HTML 总是包含 Times new roman 字体。但如果有人找到任何动态解决方案,请愉快地提供。

NSRange range = NSMakeRange(0, [parsedAttributedString length]);
[parsedAttributedString enumerateAttribute:NSFontAttributeName inRange:range options:NSAttributedStringEnumerationLongestEffectiveRangeNotRequired usingBlock:^(id value, NSRange range, BOOL *stop)
{
UIFont* currentFont = value;
UIFont *replacementFont = nil;

if ([currentFont.fontName rangeOfString:@"BoldMT" options:NSLiteralSearch].location != NSNotFound)
{
replacementFont = [UIFont fontWithName:@"HelveticaNeue-Bold" size:14.0f];
}
else if ([currentFont.fontName rangeOfString:@"BoldItalicMT" options:NSLiteralSearch].location != NSNotFound)
{
replacementFont = [UIFont fontWithName:@"HelveticaNeue-BoldItalic" size:14.0f];
}
else if ([currentFont.fontName rangeOfString:@"ItalicMT" options:NSLiteralSearch].location != NSNotFound)
{
replacementFont = [UIFont fontWithName:@"HelveticaNeue-Italic" size:14.0f];
}
else
{
replacementFont = [UIFont fontWithName:@"HelveticaNeue-Thin" size:14.0f];
}

[parsedAttributedString addAttribute:NSFontAttributeName value:replacementFont range:range];
}];

关于ios - NSDocumentTypeDocumentAttribute 不适用于 NSFontAttributeName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22473953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com