最
目录
近做了个展示html富文本的内容,自己发现有两种写法,就提供出来吧,希望大家有什么好的建议或新的方法可以提出来
环境:swift4 iOS 9.0 *
一、webview展示,链接跳转到系统safari
我这里使用的是wkwebview
private let webView : WKWebView = {
let view = WKWebView()
let meta = "document.getElementsByName(\"viewport\")[0].content = \"width=self.view.frame.size.width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\"" //宽度设置
view.evaluateJavaScript(meta, completionHandler: nil)
return view
}()
1、字体大小设置有两种方法:
1.1、直接拼接在html字符串里面,可以设置字体值:
let html = "<html> \n <head> \n <style type=\"text/css\"> \n body {font-size:40;}\n </style>\n </head>\n <body>\(model?.content ?? "")</body> \n </html>"
webView.loadHTMLString(html, baseURL: nil)
1.2、WKNavigationDelegate 代理里面进行缩放:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let js = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '300%'" //这里放大3倍,写的300%,具体可以自己调整
webView.evaluateJavaScript(js, completionHandler: nil)
}
2、跳转自定义,因为文本并没有占据整个页面,设计也未增加网页返回等内容,所以跳转到浏览器相对好一点,我这里跳转到safari控制器,在WKNavigationDelegate 代理里面处理:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.allow)
return
}
if url.absoluteString.hasPrefix("http"){
let safari = SFSafariViewController(url: url)
// self.navigationController?.pushViewController(safari, animated: true)
self.show(safari, sender: nil) //nav和show这里展示效果一致
decisionHandler(.cancel)
}else{
decisionHandler(.allow)
}
}
二、传统label展示,这里链接不能点击
1、将html转换为富文本:
//htmlString 要转换的html字符串
//width webview宽度,不设置图片有可能展示一半
public static func `init`(htmlString:String,width:CGFloat = SCREEN_WIDTH) ->NSAttributedString{
do {
// 转换成atrributeString
let aboutStr : String = htmlString as String
let str1 = "<head><style>img{max-width:"
let str2 = width
let str3 = " !important;}</style></head>"
let newStr = (str1 + "\(str2)" + str3 + aboutStr) as NSString
//"<head><style>img{max-width:width!important;}</style></head>" 设置文本宽度,适配图片展示
let strData = newStr.data(using: String.Encoding.unicode.rawValue, allowLossyConversion: true)!
let attr = try NSMutableAttributedString.init(data: strData, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] , documentAttributes: nil)
return attr
}catch let error as NSError {
print(error.localizedDescription)
}
return NSAttributedString.init(string: "")
}
2、富文本高度计算:
extension NSAttributedString{
public func getSpaceLabelHeightwithSpeace(_ speace : CGFloat,font:UIFont,width:CGFloat) -> CGFloat {
let size = self.boundingRect(with: CGSize.init(width: width, height: CGFloat(MAXFLOAT)), options: NSStringDrawingOptions.usesLineFragmentOrigin, context: nil)
return size.height
}
}
label设置富文本字体,子间距,然后直接赋值展示就可以啦,大家有什么问题或者好的想法可以评论回复哟