作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须在数据库中保存 htmlstring,它可能是粗体、斜体或下划线。我正在使用下面的代码来获取我将保存在数据库中的字符串。当我将这个保存的字符串从 DB 获取到我的 IOS 10 时,它工作正常,但在 ios 11 的情况下。我的文本没有设置以前保存在 DB 中的样式(没有粗体或斜体等),但相同的文本工作在 IOS 10 上。
func htmlString() -> String? {
let documentAttributes = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
do {
let htmlData = try self.data(from: NSMakeRange(0, self.length), documentAttributes:documentAttributes)
if let htmlString = String(data:htmlData, encoding:String.Encoding.utf8) {
return htmlString
}
}
catch {}
return nil
}
}
最佳答案
我使用以下扩展函数将 HTML html String 自定义为 NSAttributedString,它在 iOS 10 和 11 (Swift 3.2) 上运行良好
在您的选项中也包括字符编码:
[NSCharacterEncodingDocumentAttribute : encoding.rawValue]
额外的好处 - 我发现设置 HTML 文本的样式很有用 - 如果您想更改字体和颜色,您可以发挥创意并对其进行更多自定义。
extension String {
public func htmlAttributedString(regularFont: UIFont, boldFont: UIFont, color: UIColor) -> NSAttributedString {
let encoding = String.Encoding.utf8
guard let descriptionData = data(using: encoding) else {
return NSAttributedString()
}
let options: [String : Any] = [NSDocumentTypeDocumentAttribute : NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute : encoding.rawValue]
guard let attributedString = try? NSMutableAttributedString(data: descriptionData, options: options, documentAttributes: nil) else {
return NSAttributedString()
}
let fullRange = NSMakeRange(0, attributedString.length)
var regularRanges: [NSRange] = []
var boldRanges: [NSRange] = []
attributedString.beginEditing()
attributedString.enumerateAttribute(NSFontAttributeName, in: fullRange, options: .longestEffectiveRangeNotRequired) { (value, range, stop) in
guard let font = value as? UIFont else {
return
}
if font.fontDescriptor.symbolicTraits.contains(.traitBold) {
boldRanges.append(range)
} else {
regularRanges.append(range)
}
}
for range in regularRanges {
attributedString.addAttribute(NSFontAttributeName, value: regularFont, range: range)
}
for range in boldRanges {
attributedString.addAttribute(NSFontAttributeName, value: boldFont, range: range)
}
attributedString.addAttribute(NSForegroundColorAttributeName, value: color, range: fullRange)
attributedString.endEditing()
return attributedString
}
}
关于ios 11 attributedString 不适用于粗体文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47093830/
下面是我用来制作 1px 文本描边轮廓的代码。但是如何使轮廓变粗呢?如果我只是用“5px”替换所有“1px”,结果看起来很疯狂。 HTML Hello! CSS .element { color:
我是一名优秀的程序员,十分优秀!