WKWebView показывает PDF внутри границы, я не хочу границы - PullRequest
0 голосов
/ 11 января 2019

У меня есть пользовательское представление, которое добавляет WKWebView, как это:

 override func awakeFromNib() {
    super.awakeFromNib()
    loadWebView()
}

func loadWebView() {
    pdfWebView = WKWebView(frame: .zero)

    pdfWebView.navigationDelegate = self
    pdfWebView.translatesAutoresizingMaskIntoConstraints = false
    pdfWebView.isHidden = true
    self.addSubview(pdfWebView)
    ... add constrains to self anchors - top, left, right, bottom
}

Когда загрузка заканчивается, у меня есть это:

  func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.8, execute: {
        SVProgressHUD.dismiss()
        webView.isHidden = false
        webView.isOpaque = true
        webView.adjustInsets()
    })
}

Мне пришлось настроить вкладыши, потому что на iPhone X иногда PDF-файл прилипал к низу, а не к верху.

extension WKWebView {
    func adjustInsets() {
        parentViewController?.automaticallyAdjustsScrollViewInsets = false
        scrollView.contentInset = .zero
        scrollView.scrollIndicatorInsets = .zero
        scrollView.contentOffset = .zero
    }
}

Результат таков:

Серая рамка.

full border

Я пробовал это:

  1. настройка представлений, pdfWebView и pdfWebView.scrollView фон с .white или .clear

  2. webView.isOpaque = false (это единственный, который удаляет нижнюю часть серого, но не границу)

enter image description here

  1. Я использовал расширение, чтобы установить цвет .clear для всех дочерних видов

    extension UIView {
        func clearBackgrounds() {
            self.backgroundColor = UIColor.clear
            for subview in self.subviews {
                subview.clearBackgrounds()
            }
        }
    } 
    

Ничего не работает для удаления границы . Я не могу редактировать PDF, потому что он загружен с ws и используется в нескольких приложениях.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Я буду использовать PDFKit для iOS 11 + в этом пользовательском представлении с отступлением от WKWebView для более ранних версий. PDFView не имеет серого фона.

0 голосов
/ 15 января 2019

Решение: Я нашел способ сделать это, я думаю, вы можете использовать это с PDF, который имеет белый фон. У него есть идея, вы можете манипулировать этим с вашим дизайном.

self.view.backgroundColor = UIColor.white
let urlString = "http://www.africau.edu/images/default/sample.pdf"
let string = "<html><body marginwidth=\"0\" marginheight=\"0\" style=\"background-color: transparent\"><embed width=\"100%\" height=\"100%\" name=\"plugin\" src=\"\(urlString)\" type=\"application/pdf\"></body></html>"
webView.loadHTMLString(string, baseURL: nil)

Редактировать: Если вы хотите использовать это с данными PDF в кодировке base64, вы можете использовать с этим:

var pdfBase64String = "" //Your pdf data
if let decodedData = Data(base64Encoded: pdfBase64String, options: .ignoreUnknownCharacters) {
        pdfWebView.load(decodedData, mimeType: "application/pdf", characterEncodingName: "utf-8", baseURL: URL(fileURLWithPath: ""))
}

Старый ответ: Отключение «WebKitDiskImageCacheEnabled» может решить эту проблему. Можете ли вы попробовать это перед загрузкой PDF?

UserDefaults.standard.set(false, forKey: "WebKitDiskImageCacheEnabled")
UserDefaults.standard.synchronize()
...