PDFView - 如何自动缩放并仍然加载第一页?

Posted

技术标签:

【中文标题】PDFView - 如何自动缩放并仍然加载第一页?【英文标题】:PDFView - How to autoscale and still load first page? 【发布时间】:2019-08-22 22:16:57 【问题描述】:

如果autoScales 被禁用,pdfView 会显示第一页(图 1),但如果启用,PDFview 会在 iPhoneX 上滚动到第二页(图 2)。

Github - https://github.com/2raptor/DownloadPDF

import UIKit
import PDFKit

class PDFViewController: UIViewController 
    var pdfView = PDFView()
    var pdfURL: URL?

    override func viewDidLoad() 
        super.viewDidLoad()

        pdfView.translatesAutoresizingMaskIntoConstraints = false
        if let pdfURL = pdfURL,
            let document = PDFDocument(url: pdfURL) 
            pdfView.document = document
            pdfView.autoScales = true
        

        view.addSubview(pdfView)

        // Add contstraints
        pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
    


尝试了几个解决方案,但没有奏效。

// after `pdfView.document = document` above
            if let firstPage = document.page(at: 0) 
                let firstPageBounds = firstPage.bounds(for: pdfView.displayBox)
                pdfView.go(to: CGRect(x: 0, y: firstPageBounds.height, width: 1.0, height: 1.0), on: firstPage)
            

【问题讨论】:

想知道您是否找到了解决方案?我有同样的问题。 在下面添加了我的答案 【参考方案1】:

在设置 autoScales 之前设置 usePageViewController 解决了这个问题

pdfView.usePageViewController(true)

行之有效的完整解决方案

import UIKit
import PDFKit

class PDFViewController: UIViewController 
    var pdfView = PDFView()
    var pdfURL: URL?

    override func viewDidLoad() 
        super.viewDidLoad()

        pdfView.translatesAutoresizingMaskIntoConstraints = false
        if let pdfURL = pdfURL,
            let document = PDFDocument(url: pdfURL) 
            pdfView.document = document
            pdfView.usePageViewController(true)
            pdfView.autoScales = true
        

        view.addSubview(pdfView)

        // Add contstraints
        pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
        pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
        pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
        pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
    

【讨论】:

很遗憾,这不会像您原来的帖子那样产生一个连续的页面。 没错。但是我没有一次显示单页的要求,所以我对这个解决方案没问题。我关注了这篇文章medium.com/@ji3g4kami/…请看看这是否有帮助。【参考方案2】:

在我的情况下,ios 12.4 中存在pdfView.autoScales = true 的错误,我无能为力。尝试升级到 iOS 14.3 看看是否可以解决此问题。

【讨论】:

【参考方案3】:

解决方案:https://***.com/a/66565702/6404249

我不能为你复制粘贴答案,但我希望它能帮助你!

【讨论】:

以上是关于PDFView - 如何自动缩放并仍然加载第一页?的主要内容,如果未能解决你的问题,请参考以下文章

如何恢复在 PDF 视图中加载的最后一页?

如何在 Swift 中的 PDF 上绘制一些东西?

如何知道用户何时在 PDFView 中滑动到下一页? - 安卓

iOS:如何清除 PDFView?

如何知道用户何时在 PDFKit 的 PDFView 中滑动到下一页?

如何在已加载到 PDFView 的 PDF 上实现文本到语音