Swift 4: Изменить / Очистить PDFView содержимое - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу использовать каркас PDFView в Swift 4. (https://developer.apple.com/documentation/pdfkit/pdfview)

Следующая функция получает путь к документу PDF. Если путь допустим, файл PDF отображается успешно. Возникла проблема, когда я дважды вызываю openMe(path: String). В этом случае старый контент все еще там, и новый контент добавляется. Я просто хочу заменить старый контент новым контентом.

private var pdfData: NSData? = nil

func openMe(path: String) {
   let fileManager = FileManager.default

   if fileManager.fileExists(atPath: path){
       let url = NSURL.fileURL(withPath: path)
       pdfData = NSData(contentsOfFile: path)
       let pdfView = PDFView(frame: self.view.frame)
       pdfViewController?.pdfViewControllerInformsMeasurementDataViewController = self
       pdfView.document = PDFDocument(url: url)
       pdfView.autoScales = true
       pdfView.maxScaleFactor = 0.5
       pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
       pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

       self.pdfViewController?.view.addSubview(pdfView)
       self.show(self.pdfViewController!, sender: nil)
    }
}

EDIT

См. Ответ excitedmicrobe: я только что изменил код, как показано в ответе, но расстояние между навигационным контроллером и PDFView отличается.

Fist openMe вызов:

enter image description here

Второй openMe вызов:

enter image description here

1 Ответ

0 голосов
/ 26 ноября 2018

В этом случае вам необходимо сделать pdfView глобальным:

До viewDidLoad() добавить следующее:

var pdfView = PDFView()

override func viewDidLoad() {
    super.viewDidLoad()

    // ....
}

и отредактировать свой код openMe () так:

func openMe(path: String) {
     if self.pdfViewController?.view.subviews.contains(pdfView) {
          self.pdfView.removeFromSuperview() // Remove it
      } else {
          // Do Nothing
      }

     let fileManager = FileManager.default

   if fileManager.fileExists(atPath: path){
       let url = NSURL.fileURL(withPath: path)
       pdfData = NSData(contentsOfFile: path)
       self.pdfView = PDFView(frame: self.view.frame)
       pdfViewController?.pdfViewControllerInformsMeasurementDataViewController = self
       pdfView.document = PDFDocument(url: url)
       pdfView.autoScales = true
       pdfView.maxScaleFactor = 0.5
       pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
       pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

       self.pdfViewController?.view.addSubview(pdfView)
       self.show(self.pdfViewController!, sender: nil)
     }
}
...