【问题标题】:Swift - Apply local css to web viewSwift - 将本地 CSS 应用到 Web 视图
【发布时间】:2019-01-10 21:00:57
【问题描述】:

我正在 Web 视图中加载一个 html 页面,并且我想应用一个本地 css 文件。 我从服务器接收字符串中的 html,css 将在我的应用程序中。例如这里我想显示“你好!”红色的。

self.articleView = UIWebView(frame : CGRect(x : self.articleButton.frame.minX, y : self.articleButton.frame.maxY + 1, width : self.frame.width - 20, height: self.frame.height - self.articleButton.frame.maxY - 10));
self.articleView.backgroundColor = UIColor.clearColor();
self.addSubview(self.articleView);
self.articleView.loadHTMLString("<html><body><h1>Hello!</h1></body></html>", baseURL: nil)

你知道如何应用 css 吗? 我应该尝试使用 WKWebView 吗?

提前致谢。

【问题讨论】:

    标签: ios css swift


    【解决方案1】:

    像这样添加UIWebView的委托方法

    func webViewDidFinishLoad(webView: UIWebView) {    
        if let path = Bundle.main.path(forResource: "styles", ofType: "css") {
           let javaScriptStr = "var link = document.createElement('link'); link.href = '%@'; link.rel = 'stylesheet'; document.head.appendChild(link)"
           let javaScripthPath = String(format: javaScriptStr, path)
           self.articleView.stringByEvaluatingJavaScript(from: javaScripthPath)
        }
    
        //Second way
        do {
            let cssContent = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding as NSStringEncoding);
            let javaScrStr = "var style = document.createElement('style'); style.innerHTML = '%@'; document.head.appendChild(style)"
            let JavaScrWithCSS = NSString(format: javaScrStr, cssContent)
            self.articleView.stringByEvaluatingJavaScriptFromString(JavaScrWithCSS as String)
        } catch let error as NSError {
            print(error);
        }
    }
    

    希望这会对你有所帮助。

    【讨论】:

    • 它不起作用。在我的 CSS 中,我只有这一行:h1, h2 {font-family: "--unknown-1--", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; color:#94C11D}
    • 我对您的代码进行了一些调整,但它有效!非常感谢你:)
    • 对我不起作用
    【解决方案2】:

    如果您从外部文件或多行字符串加载 CSS,请不要忘记像这样替换出现的换行符 \n:

    cssString.replacingOccurrences(of: "\n", with: "")
    

    没有这个 innerHtml 将无法工作(因为它不知道 \n 所以它是无效的)并显示一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 2011-07-18
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      • 1970-01-01
      相关资源
      最近更新 更多