gpt4 book ai didi

ios 11 attributedString 不适用于粗体文本

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:31:06 29 4
gpt4 key购买 nike

我必须在数据库中保存 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/

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