Swift4:更改/清除PDFView内容
Swift 4: Change / Clear PDFView content
我想在Swift4中使用PDFView框架。(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
通话:
在这种情况下,您需要将 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)
}
}
我想在Swift4中使用PDFView框架。(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
通话:
在这种情况下,您需要将 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)
}
}