- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
应用程序接收带有在 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/
这个问题在这里已经有了答案: NSAttributedStringKey giving an unresolved identifier error (6 个答案) 关闭 4 年前。 我将我的代码从
我正在尝试将字体从中号更改为常规字体,但在设置 NSFontAttributeName 的字体类型时,我总是收到 nil。我可以毫无问题地将字体设置为中等字体,但是当我尝试以编程方式将其设置为常规字体
我试图将两个属性应用于一个字符串,一个用于字距调整 (NSKernAttributeName),一个用于字体 (NSFontAttributeName)。虽然我已经检查并重新检查了 1000 次,但我
我正在尝试将以下代码应用到当前自定义字体的粗体中,如何将其包含在字典中? let normalWhite = [NSFontAttributeName : UIFont(name: "somefont
故事 应用程序接收带有在 CMS 中编辑的 html 标签的字符串。应用程序接收该字符串并放入 UILabel。不久前,html 标签被添加到这个字符串中。显然带有 html 标签的字符串在站点中看起
我目前正在使用此 answer 提供的扩展程序在 UITextView 中将 html 转换为字符串。一切正常,但由于某些奇怪的原因,NSFontAttributeName 在此过程中未应用于字符串。
我正在尝试正确设置导航栏的样式,我需要将字体更改为大小点为 19 的 helvetica neue。我曾经使用过这段代码,但我注意到现在效果不佳: navigationController?.navi
嗯,我在几个地方搜索过,虽然据称有些人找到了修复方法,但它似乎不适用于我的情况。 我正在尝试按程序设置一些 UItextviews 的行高,如下所示: UITextView *lab = [Loca
我在使用库中的 Swift 代码时遇到了一些问题,我已经使用了一段时间。这似乎与某种版本冲突有关,但我不确定。 代码如下: let attribMsg = NSAttributedString(str
我是一名优秀的程序员,十分优秀!