我正在使用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填充整个屏幕宽度,没有任何余量/差距。
会感激一些帮助。
更新:根据以下建议使用的代码 - 但目前不工作:
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
只需在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
对,首先要感谢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
}
}
}
不会撒谎,我不确定为什么这个按照这个顺序工作,我会很欣赏一个比我更聪明的评论,但我希望这有助于其他人
我一直在努力解决类似的问题,以及autoScales的非常奇怪和不一致的行为。在我的情况下,自动缩放在第一个加载的文档上工作,但不在同一pdfView中的任何后续加载的文档上工作,或者它只在第二个加载的文档中工作。
我已将pdfView嵌入到UIScrollView中,以便更好地控制手势行为。
命令的顺序似乎确实是关键。经过大量的试验和错误,这是最适合我的顺序:
pdfView.document = pdfDocument
pdfView.displayMode = .singlePage
pdfView.autoScales = true
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
在我的情况下,这是一切工作的唯一顺序,只有在第2,5和6阶段都存在时才有效。