iOS 展示html文本两种方式

目录

一、webview展示,链接跳转到系统safari

1、字体大小设置有两种方法:

1.1、直接拼接在html字符串里面,可以设置字体值:

1.2、WKNavigationDelegate 代理里面进行缩放:

2、跳转自定义,因为文本并没有占据整个页面,设计也未增加网页返回等内容,所以跳转到浏览器相对好一点,我这里跳转到safari控制器,在WKNavigationDelegate 代理里面处理:

二、传统label展示,这里链接不能点击

1、将html转换为富文本:

2、富文本高度计算:


近做了个展示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设置富文本字体,子间距,然后直接赋值展示就可以啦,大家有什么问题或者好的想法可以评论回复哟

猜你喜欢

转载自blog.csdn.net/wokuaab_q/article/details/82178120
今日推荐