【问题标题】:Swift 4: Change / Clear PDFView contentSwift 4:更改/清除 PDFView 内容
【发布时间】:2018-11-26 08:41:59
【问题描述】:

我想在 Swift 4 中使用 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电话:

【问题讨论】:

    标签: swift pdfview


    【解决方案1】:

    在这种情况下,您需要将 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)
         }
    }
    

    【讨论】:

    • 感谢您的回复! +1 现在它可以工作了,但是在第一次函数调用之后,PDF 文件显示得有点低。
    • 低是什么意思?我的代码与布局无关。所以它可能是你的代码
    • pdf 视图就像一个书页,在第一个 openMe 中。如果单击调试层次结构。你会看到它是一样的。就像 iBooks 应用程序一样。如果您向左或向右滑动,另一个就会变得可见。所以在第一个中,我们有 2 个视图。第一个成为书的第一页,第二个变得可见并首先进入它的背面
    • 好的,它可能是标准的,但它不符合我的目的。我的解决方法是在 viewDidLoad() 中设置pdfView = PDFView(frame: self.view.frame)。现在外观总是一样的。
    • 恐怕这是唯一的办法。除非您为其添加白色背景。因为pdfview的视图依赖于pdf本身
    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多