从 Swift 中的本地文件编辑和加载 HTML

Edit and Load HTML from local file in Swift

我的项目包中存储了一个 .html 文件。当我在 WebView.(UIWebview/WKWebview) 中加载它时,数据已加载但其中的 table 结构不可见。 table 边框、列、行。这些值只是浮动的。在 Chrome 浏览器中它可以正常打开。

let myURL = Bundle.main.url(forResource: "prescription", withExtension: "html")
    let myURLRequest:URLRequest = URLRequest(url: myURL!)
    webView.loadRequest(myURLRequest)

Chrome 浏览器 :

iOS 应用程序 UIWebView :

Html 页面可以响应以适合任何尺寸,但我无法像 Web 一样正确地加载到 UIWebview 中。 我需要将文件存储在本地,因为我需要更改其值并在 webview 上显示。

将本地内容加载到 WKWebView 时,您应该使用 loadHTMLString(_:baseURL:) 而不是 loadRequest。第一个函数允许您提供一个基础 URL,您还可以将其指向包中 - 因此您显然需要将所有相关文件添加到您的应用程序包中。

guard let indexPath = Bundle.main.path(forResource: "index", ofType: "html"),
   let content =  try String(contentsOfFile: indexPath, encoding: .utf8),
   let baseUrl = URL(fileURLWithPath: indexPath) else {
        // Error handling
   }
webView.loadHTMLString(content, baseURL: baseUrl)

找到解决方案: 如果您正在应用一些本地 css,其路径在 HTML 文件中。 即。

  1. 将 css 文件 "myDefault.css" 添加到您的 xcode 项目目录。
  2. 将 HTML 转换为字符串,并将 HTML 文件中 css 的路径替换为您的本地路径。 :
  3. 将 HTML 的内容加载到基数为 url 的 UIWebView。 (提供本地文件路径作为 baseUrl 很重要)

    webView = UIWebView()
    
    let pathToInvoiceHTMLTemplate = Bundle.main.path(forResource: "presc", ofType: "html")
    let pathToHTMLCSS = Bundle.main.path(forResource: "myDefault", ofType: "css")
    do {
        var strHTMLContent = try String(contentsOfFile: pathToInvoiceHTMLTemplate!)
    
        strHTMLContent = strHTMLContent.replacingOccurrences(of: "./assets/stylesheets/myDefault.css", with: pathToHTMLCSS!)
    
    let pdfURL = URL(fileURLWithPath: pathToInvoiceHTMLTemplate!)
    webView.loadHTMLString(strHTMLContent, baseURL: pdfURL)
    
    }catch let err{
        print(err)
    }