iOS PDFKit没有填写UIView

问题描述 投票:4回答:3

我正在使用PDFKit来显示简单的PDF。当我在UIView内的屏幕上显示它们时,我使用了下面的代码。

目标: - 从内容开始填充视图 - 希望明智地填充整个屏幕

override func viewDidLoad() {
    super.viewDidLoad()

    if let path = Bundle.main.path(forResource: "Disclaimer", ofType: "pdf") {
        let url = URL(fileURLWithPath: path)
        if let pdfDocument = PDFDocument(url: url) {
            pdfView.document = pdfDocument
            pdfView.autoScales = true
            pdfView.maxScaleFactor = 4.0
            pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
            pdfView.displayMode = .singlePageContinuous
            pdfView.displaysPageBreaks = false
        }
    }
    self.view.backgroundColor = UIColor.black
}

在故事板中,我为UIview设置了一个约束来填充屏幕的整个宽度 - 它确实如此。

使用autoscale销售的PDF文档小于屏幕的宽度,它基本上在pdf周围添加了一个边距。我可以放大并使Pdf填满整个屏幕,然后溢出并滚动条进入游戏。

如果我手动设置比例因子,我可以使单页PDF填充屏幕宽度,但如果PDF有多个页面,则宽度将恢复为小于屏幕宽度,并且存在margin

最后,我只想用PDF填充整个屏幕宽度,没有任何余量/差距。

Screenshot

会感激一些帮助。

更新:根据以下建议使用的代码 - 但目前不工作:

if let path = Bundle.main.path(forResource: pdfObject, ofType: "pdf") {
            let url = URL(fileURLWithPath: path)
            if let pdfDocument = PDFDocument(url: url) {

            pdfView = PDFView(frame: CGRect(x: 0, y: 0, width: pdfView.frame.width, height: pdfView.frame.height))
                pdfView.document = pdfDocument

            }

        }

注意:pdfView是我的UIView,它是PDFView

ios uiview scale pdfkit pdfview
3个回答
2
投票

只需在pdfview = PDFView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))之前使用pdfView.document = pdfDocument

并删除这些行:

pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit

2
投票

对,首先要感谢Mahesh。虽然他的答案没有直接回答我的问题,但他们所说的两件事确实提供了解决这个问题的途径。

总的来说,要设置pdf来填充视图,我需要在之前设置自动调整和自动调整

pdfView.document = pdfDocument

然后控制变焦,设置这些后

pdfView.document = pdfDocument

因此我的最终代码是:

func pdfDisplay() {

    if let path = Bundle.main.path(forResource: pdfObject, ofType: "pdf") {
        let url = URL(fileURLWithPath: path)
        if let pdfDocument = PDFDocument(url: url) {

            pdfView.autoresizesSubviews = true
            pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleTopMargin, .flexibleLeftMargin]
            pdfView.displayDirection = .vertical

            pdfView.autoScales = true
            pdfView.displayMode = .singlePageContinuous
            pdfView.displaysPageBreaks = true
            pdfView.document = pdfDocument

            pdfView.maxScaleFactor = 4.0
            pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit

        }
    } 
}

不会撒谎,我不确定为什么这个按照这个顺序工作,我会很欣赏一个比我更聪明的评论,但我希望这有助于其他人


2
投票

我一直在努力解决类似的问题,以及autoScales的非常奇怪和不一致的行为。在我的情况下,自动缩放在第一个加载的文档上工作,但不在同一pdfView中的任何后续加载的文档上工作,或者它只在第二个加载的文档中工作。

我已将pdfView嵌入到UIScrollView中,以便更好地控制手势行为。

命令的顺序似乎确实是关键。经过大量的试验和错误,这是最适合我的顺序:

  1. 加载文档 pdfView.document = pdfDocument
  2. 设置显示模式 pdfView.displayMode = .singlePage
  3. 设置任何约束,背景,阴影等。
  4. 通过修改约束来执行对pdfView大小的更改
  5. 设置autoScales pdfView.autoScales = true
  6. 设置比例因子 pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit

在我的情况下,这是一切工作的唯一顺序,只有在第2,5和6阶段都存在时才有效。

© www.soinside.com 2019 - 2024. All rights reserved.