Nit*_*esh 7 uitextview nsattributedstring swift
我正在使用HTML内容呈现textview.我已经采用了一些"div"标签并在其上应用了一些CSS.我在使用CSS类在"div"上应用填充时遇到了一个问题,该类在textview上渲染后没有反映div.我使用以下方法将HTML内容字符串转换为属性字符串.
if let htmlData = htmlContent.dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true) {
do {
return try NSMutableAttributedString(
data: htmlData,
options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
}
catch let error as NSError {
printDebuggingMode("Couldn't translate \(htmlContent): \(error.localizedDescription) ")
}
}
Run Code Online (Sandbox Code Playgroud)
我希望在textView的图像中实现下面附带的类似内容.
.padding {
padding-left: 20px;
}
Run Code Online (Sandbox Code Playgroud)
小智 1
问题是UITextView不支持HTML 内容内的填充属性。考虑到这一点,您有两个选择:
一方面,UIWebView按照回复中的建议使用 。您将具有与 中相同的功能UITextView,但您必须使用如下所示的方法来计算文本的高度:
此方法返回高度而不考虑 的插入UITextView,您稍后需要添加它们。
func heightForText(text: String?, width: CGFloat) -> CGFloat {
//Get attributed text from string
let attributedText = text?.toHtmlTextWithAttributes()
if let attributedText = attributedText {
let rect = attributedText.boundingRectWithSize(
CGSizeMake(width, CGFloat.max),
options: [.UsesLineFragmentOrigin, .UsesFontLeading],
context: nil)
return rect.height
}
//Return any default height
return 100
}
Run Code Online (Sandbox Code Playgroud)
这是String将文本转换为NSAttributedString.
extension String {
public func toHtmlTextWithAttributes() -> NSAttributedString? {
let encodedData = self.dataUsingEncoding(NSUTF8StringEncoding)
if let data = encodedData {
let paragrahpStyle = NSMutableParagraphStyle()
paragrahpStyle.lineBreakMode = .ByWordWrapping
let attributes: [String: NSObject] = [
NSParagraphStyleAttributeName: paragrahpStyle,
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding
]
return try! NSAttributedString(data: data, options: attributes, documentAttributes: nil)
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
另外,不建议使用UITableViewAutomaticDimension ,因为在相当大的列表中,它可能会导致性能问题。
另一方面,如果您UITextView确实需要使用,您可以解析 html,提取标题和段落并将它们显示在两个单独的UITextView. 这样你就可以UITextView像这样调整第二个的插入:
textView.textContainerInset = UIEdgeInsetsMake(0, 20, 0, 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |