iOS 13 WKWebView больше не показывает файл PDF - PullRequest
2 голосов
/ 24 сентября 2019

Я использую WKWebView, чтобы показать файл pdf с удаленного URL.Он работал нормально в iOS 12, но в iOS 13 он просто показывает пустой экран.Я попал в тот же домен с URL-адресом изображения, и он работал нормально, но у него есть некоторые проблемы только с pdf файлами.

let myURL = URL(string:"somefileurl.pdf") // If I hit this url in safari, It will download a pdf file.
let myRequest = URLRequest(url: myURL!)
webViewPdf.load(myRequest)  

Ответы [ 4 ]

3 голосов
/ 24 сентября 2019

Я понял, что ответ ' content-type был "application / octet-stream" вместо "application / pdf"

Итак, я загружаю WKWebView как:

if let myURL = URL(string:"somefileurl.pdf") {
    if let data = try? Data(contentsOf: myURL) {
       webViewPdf.load(data, mimeType: "application/pdf", characterEncodingName: "", baseURL: myURL)
    }
}
0 голосов
/ 26 сентября 2019

Просто внедрите методifyPolicyFor, доступный в WKNavigationDelegate, как указано ниже,

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
   decisionHandler(.allow)
}

и установите делегата в веб-представлении, как показано ниже,

yourWebView.navigationDelegate = self
0 голосов
/ 26 сентября 2019

UIWebView также имеет ту же проблему.Исправлено следующим образом (цель-c):

[self.webView loadData:data MIMEType:@"application/pdf" textEncodingName:@"" baseURL:[NSURL URLWithString:@"FilePathOrUrlString"];
0 голосов
/ 24 сентября 2019

Для PDF Попробуйте в моем случае, работает 100%

func openFile(url:URL){
self.displayDocument(filePath: url, type: "pdf")
}



 extension Your ViewControler Name :UIDocumentInteractionControllerDelegate{

            public func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
                UINavigationBar.appearance().tintColor = UIColor.blue
                return self
            }

            public func documentInteractionControllerDidEndPreview(_ controller: UIDocumentInteractionController) {
                UINavigationBar.appearance().tintColor = UIColor.clear
                self.documentInteractionController = nil
            }
            func documentInteractionControllerDidDismissOptionsMenu(_ controller: UIDocumentInteractionController) {
                UINavigationBar.appearance().tintColor = UIColor.clear
                self.navigationController?.dismiss(animated: false, completion: nil)
            }

            func displayDocument(filePath:URL,type:String){
                SVProgressHUD.dismiss()

                self.documentInteractionController = UIDocumentInteractionController(url:filePath )
                // Preview PDF
                self.documentInteractionController.delegate = self
                self.documentInteractionController.presentPreview(animated: true)
            }
        }
...