![](/img/trans.png)
[英]Changing font size in NSAttributedString without losing Html style - Swift
[英]Changing Font for Unordered List for Swift NSAttributedString
我試圖從HTML字符串中創建NSAttributedString,但是我必須更改字符串的字體。 我能夠通過執行以下操作成功實現此目標:
let myOriginalString: String = "<!DOCTYPE html>
<head>
<style type=\"text/css\">
body{font-family: '-apple-system','Avenir-Medium',`Avenir-Black`; font-size:14;}
</style>
<body>
My HTML content
</body>"
let data: Data = myOriginalString.data(using: .utf8)
let myConvertedString: NSAttributedString = NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
在myConvertedString
上呈現myConvertedString
,文本使用正確的字體。
但是,當我嘗試執行相同的轉換(其中HTML正文包含無序列表)時 , 無序列表中的內容不是我指定的格式:
let myOriginalString: String = "<!DOCTYPE html>
<head>
<style type=\"text/css\">
body{font-family: '-apple-system','Avenir-Medium',`Avenir-Black`; font-size:14;}
</style>
<body>
My HTML content
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</body>"
let data: Data = myOriginalString.data(using: .utf8)
let myConvertedString: NSAttributedString = NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
當在屏幕上呈現myConvertedString
,字符串My HTML Content
具有正確的格式,但是Item 1
和Item 2
不在我指定的字體中。
我嘗試為ul
標簽和li
標簽添加樣式,但是結果相同。
為什么NSAttributedString用正確的字體渲染所有文本,除了無序列表? 有沒有更好的方法用NSAttributedString創建無序列表而不是使用html?
我剛剛在Arial上嘗試過,它的工作原理是:
override func viewDidLoad() {
super.viewDidLoad()
let myOriginalString = """
<!DOCTYPE html>
<head>
<style type="text/css">
body {
font-family: Arial;
font-size: 32px;
color: red;
}
</style>
<body>
My HTML content
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</body>
"""
if let data = myOriginalString.data(using: .utf8) {
if let converted = try? NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil) {
textView.attributedText = converted
}
}
}
我發現使用NSMutableParagraphStyle代替使用HTML無序列表比找到更好的解決方案:
let myAttributedString = NSMutableAttributedString()
// Create a paragraph style
let paragraphStyle: NSMutableParagraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: 10, options: [:])]
paragraphStyle.firstLineHeadIndent = 0
paragraphStyle.headIndent = 10
let item1 = NSMutableAttributedString(string: "\u{2022} Item1\n\n", attributes: [.font: UIFont.systemFont(ofSize: 14.0), .paragraphStyle: paragraphStyle])
let item2 = NSMutableAttributedString(string: "\u{2022} Item2\n\n", attributes: [.font: UIFont.systemFont(ofSize: 14.0), .paragraphStyle: paragraphStyle])
myAttributedString.append(item1)
myAttributedString.append(item2)
現在, myAttributedString
以正確的字體和正確的樣式打印出item1
和item2
(包裝的單詞的item2
值與項目符號點不同)
我認為HTML部分出現的字體不正確,因為我試圖創建一個NSAttributedString,該NSAttributedString包含一些普通的NSAttributedString,一個HTML NSAttributedString,然后是更多的普通NSAttributedStrings。 我不認為這應該是一個問題,也許是一個錯誤???
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.