iOS PDFKit 未填充 UIView
iOS PDFKit not filling UIView
我正在使用 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.document = pdfDocument
之前使用pdfview = PDFView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
并删除这些行:
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 大小进行更改
设置自动缩放
pdfView.autoScales = true
设置比例因子
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
这是在我的案例中一切正常的唯一顺序,并且只有在阶段 2、5 和 6 都存在时才有效。
在 viewDidLoad()
中设置 pdfView
并将其放入 viewDidLayoutSubviews()
:
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
先设置minScaleFactor
,再设置scaleFactor
,必须在minScaleFactor
和maxScaleFactor
之间。
运行 一个调试,并改变这个值直到你得到最适合你的尺寸。
func showPDF(_ dataStr:String){
guard let data = Data(base64Encoded: dataStr) else { return }
let pdfView = PDFView(frame: self.view.bounds)
pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
pdfView.autoScales = true
pdfView.displayMode = .singlePageContinuous
pdfView.displaysPageBreaks = true
pdfView.document = PDFDocument(data:data)
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = 1.15
pdfView.scaleFactor = 1.15
self.view.addSubview(pdfView)
}
我正在使用 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.document = pdfDocument
pdfview = PDFView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
并删除这些行:
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 大小进行更改
设置自动缩放
pdfView.autoScales = true
设置比例因子
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
这是在我的案例中一切正常的唯一顺序,并且只有在阶段 2、5 和 6 都存在时才有效。
在 viewDidLoad()
中设置 pdfView
并将其放入 viewDidLayoutSubviews()
:
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
先设置minScaleFactor
,再设置scaleFactor
,必须在minScaleFactor
和maxScaleFactor
之间。
运行 一个调试,并改变这个值直到你得到最适合你的尺寸。
func showPDF(_ dataStr:String){
guard let data = Data(base64Encoded: dataStr) else { return }
let pdfView = PDFView(frame: self.view.bounds)
pdfView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
pdfView.autoScales = true
pdfView.displayMode = .singlePageContinuous
pdfView.displaysPageBreaks = true
pdfView.document = PDFDocument(data:data)
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = 1.15
pdfView.scaleFactor = 1.15
self.view.addSubview(pdfView)
}