Swift 4: Изменить / Очистить PDFView содержимое
Я хочу использовать PDFView Framework в 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)
}
}
РЕДАКТИРОВАТЬ
Обратитесь к ответу excitedmicrobe: я только что изменил код, как показано в ответе, но расстояние между навигационным контроллером и PDFView отличается.
кулак openMe
вызов:
второй openMe
вызов:
2 ответа
В этом случае вам нужно будет сделать 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)
}
}
В этой ситуации вам нужно получить документ, используя try? Данные (содержимое: URL-адрес).
if let url = URL.init(string: path), let data = try? Data(contentsOf: url), let pdfDocument = PDFDocument.init(data: data){
pdfView.displayMode = .singlePageContinuous
pdfView.autoScales = true
pdfView.displayDirection = .vertical
pdfView.document = pdfDocument
//
}