Ios 下载文件&;在WKWebView中加载图像(png、jpeg)、pdf、文档等

Ios 下载文件&;在WKWebView中加载图像(png、jpeg)、pdf、文档等,ios,swift,webkit,alamofire,wkwebview,Ios,Swift,Webkit,Alamofire,Wkwebview,我使用Alamofire从url下载文档,文档可以是图像、pdf或文档等。 下面的代码用于使用Alamofire下载并保存在文档目录中,然后加载到webview中 func saveToDocumentDirectory(BillUrl: String) { let manager = Alamofire.Session.default let fileName = (BillUrl.components(separatedBy: "/").last) ?? ""

我使用Alamofire从url下载文档,文档可以是图像、pdf或文档等。 下面的代码用于使用Alamofire下载并保存在文档目录中,然后加载到webview中

func saveToDocumentDirectory(BillUrl: String) {
        let manager = Alamofire.Session.default
        let fileName = (BillUrl.components(separatedBy: "/").last) ?? ""
        MBProgressHUD.showAdded(to: self.view, animated: true)

        let destinationPath: DownloadRequest.Destination = { _, _ in
            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0];
            let fileURL = documentsURL.appendingPathComponent(fileName)
            return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
        }
        manager.download(BillUrl, method: .get, parameters: nil, headers: nil, to: destinationPath)
            .downloadProgress { (progress) in
                print("Temporary URL: ")
                print(progress.fractionCompleted)
        }
        .response { response in
            switch response.result {
            case .success(let pathUrl) :
                MBProgressHUD.hide(for: self.view, animated: true)
                print(pathUrl as Any)  //pathUrl = file:///var/mobile/Containers/Data/Application/C651C521-31A7-4512-A393-6A94442472A0/Documents/1_DlatFlsbZ1fJSs-_aIJmlg_1588075057_13.png

                self.displayAlert(path: pathUrl ?? URL(string: "")!)

            case .failure(let error) :
                MBProgressHUD.hide(for: self.view, animated: true)
                print(error)
                self.alert(message: "Something went wrong while proccessing your request", title: "Alert!")
            }
        }
    }

    fileprivate func displayAlert(path: URL) {
        let alertController = UIAlertController(title: "Alert!", message: "file downloaded at \(path)", preferredStyle: .alert)
        let OKAction = UIAlertAction(title: "OK", style: .default, handler: { action in  
            let webViewVC = storyBoard.instantiateViewController(withIdentifier: "WebViewVC") as! WebViewVC
            webViewVC.webUrl = path
            self.navigationController?.pushViewController(webViewVC, animated: true)
        })
        alertController.addAction(OKAction)
        self.present(alertController, animated: true, completion: nil)
    }
下面是webview类的代码

class WebViewVC: UIViewController, WKNavigationDelegate {

    var webView: WKWebView!
    var webUrl = URL(string: "")

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.navigationDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBar.isHidden = false
        self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false
        webView.allowsBackForwardNavigationGestures = true
        webView.autoresizesSubviews = true
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        webView.load(URLRequest(url: webUrl!, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 600.0))
    }

    override func viewDidLayoutSubviews() {
        webView.frame = CGRect.init(x: 0, y: 0, width: self.view.frame.size.width , height: self.view.frame.size.height)
        view = webView
    }
}
pdf文件在webview中加载正确,但图像在webview中加载不正确,图像顶部隐藏在导航栏后面。

我创建了WKWebView的出口,并将其添加到
self.view.addSubview(webView)
中,但每次它在
webView=WKWebView(frame:.zero,配置:webConfiguration)时崩溃时都会出现


我不知道下一步该怎么办。先谢谢你

我们可以通过设置框架来创建
WKWebView
,使其不会与
UINavigationBar
重叠

import UIKit
import WebKit

class SecondViewController: UIViewController,UIWebViewDelegate,UIScrollViewDelegate, WKUIDelegate {

   var WKwebView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
               let userContentController: WKUserContentController = WKUserContentController()
               let conf = WKWebViewConfiguration()
               conf.userContentController = userContentController
               WKwebView = WKWebView (frame: CGRect( x: 0, y: 60, width: self.view.frame.width, height: self.view.frame.height - 60 ), configuration: WKWebViewConfiguration())
               WKwebView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
               WKwebView.uiDelegate = self
               WKwebView.scrollView.bounces = false
               WKwebView.scrollView.delegate = self;
               view.addSubview(WKwebView)

                var request : URLRequest!
                let LOGINURL = "https://i.stack.imgur.com/RRy76.png";
                let url : URL = URL(string: LOGINURL as String)!
                request = URLRequest (url: url);
                WKwebView.load(request)

    }
}

输出

谢谢,它工作正常,但在iOS版本12.4.3的iPad Air上显示空白屏幕。您是否尝试从url加载pdf文件?它在13.3版的iPad Air中对我有效。我正在加载pdf和图像(png格式)。它加载在iPhone和iPad模拟器中,13.0版,但不在iPad Air上,12.4.3您在控制台中遇到任何问题吗?尝试在safari浏览器中加载PDF文件。如果正在加载,那么我们需要在wkwebview中进行检查。PDF文件和图像正在safari中加载。我正在使用diawi-to-tester通过构建共享测试。