针对单个 <p> 标签处理的问题
caocanx opened this issue · 3 comments
最近在学习 SwiftUI,尝试开发一个 Hacker News Reader,通过官方 API 返回的 HTML String 里面的 <p>
标签都是独立的,举例:
{
"by": "joak",
"id": 34934428,
"kids": [
34934473
],
"parent": 34934270,
"text": "Henry Kissinger will be 100 years old in few weeks. And he is still around giving advice. Amazing.<p>But I don't see why his opinion could be relevant on the topic...",
"time": 1677306778,
"type": "comment"
}
调用 parser.render(text)
后,会产生空行,如图所示:
我的预期是通过控制 paragraphSpacing
来调整段间距,从而让段落之间有一定的空间。上图中 paragraphSpacing
的值 是 8
,但由于中间有空行,让段落间的空隙显得很大。
Hi,
- HTML 使用中出現
<p>
的情況比較少見,通成會成對出現 <p>
在 HTML 代表段落 會在前後加上換行- 在 ZMarkupParser 中如果標籤沒有正確關閉
<p></p>
or<p/>
會自動解讀成<p/>
- 換行在 NSAttributedString 要 insert/append
\n
到字串,而非NSParagrahstyle
可控制
回到問題,原文在 ZMarkupParser Render 後會解讀成:
Henry Kissinger will be 100 years old in few weeks. And he is still around giving advice. Amazing.<p/>But I don't see why his opinion could be relevant on the topic...
Render 過後應該要是:
Henry Kissinger will be 100 years old in few weeks. And he is still around giving advice. Amazing.\nBut I don't see why his opinion could be relevant on the topic...
圖上結果多了一個 \n
,變成 \n\n
,因為當初沒考慮到 <p>
可能單獨出現,因此在 mapping p
時在前後都加上了 \n
在成對的狀況下是正確的:
test<p>1231</p>test
->
test
1231
test
但在單獨的情況會多一個 \n
變成:
test
1231
test
會儘速修正,感謝回報。
另外,行距空間可透過設置 root style 控制:
let parser = ZHTMLParserBuilder.initWithDefault().set(rootStyle: MarkupStyle(paragraphStyle: .init(lineSpacing: 8))).build()
要注意的是,預設是 0,設置 8 是加大的意思。
by the way, 目前 ZMarkupParser 並不能很好是配 SwiftUI 的 AttributedString,實際上 ZMarkupParser 應該多實現直接 Convert HTML To AttributedString,而不是轉換成 NSAttributedString 放到 AttributedString 中再給 SwiftUI 使用。
ref: #12
感谢回复,关于你回复中提到的这一段:
by the way, 目前 ZMarkupParser 並不能很好是配 SwiftUI 的 AttributedString,實際上 ZMarkupParser 應該多實現直接 Convert HTML To AttributedString,而不是轉換成 NSAttributedString 放到 AttributedString 中再給 SwiftUI 使用。
我其实是在用 UILabelView
,因为 SwiftUI 的 Text 对于各种文本样式的支持还比较欠缺,所以 ZMarkupParser 真的很有帮助!
感谢回复,关于你回复中提到的这一段:
by the way, 目前 ZMarkupParser 並不能很好是配 SwiftUI 的 AttributedString,實際上 ZMarkupParser 應該多實現直接 Convert HTML To AttributedString,而不是轉換成 NSAttributedString 放到 AttributedString 中再給 SwiftUI 使用。
我其实是在用
UILabelView
,因为 SwiftUI 的 Text 对于各种文本样式的支持还比较欠缺,所以 ZMarkupParser 真的很有帮助!
了解,感謝補充;我對 SwiftUI 不熟😅