问题描述
我要水平显示PDF,从右到左连续显示页面,并逐页显示,用户捏一页将使所有页面以相同的比例同步。
我写了如下代码:
if let pdfDocument = PDFDocument(url: pdfUrl) {
pdfView.document = pdfDocument
pdfView.displayMode = .singlePageContinuous
pdfView.displaysRTL = true
pdfView.autoScales = true
pdfView.autoresizesSubviews = true
pdfView.displayDirection = .horizontal
pdfView.displaysPageBreaks = true
pdfView.pageBreakMargins = UIEdgeInsets(top: 0,left: 0,bottom: 0,right: 0)
pdfView.maxScaleFactor = 4.0
pdfView.minScaleFactor = pdfView.scaleFactorForSizeToFit
}
但是displayRTL将不起作用,并且默认比例将不会显示整个单页,而是适合PDF页面的高度(页面右侧将在屏幕外)。
如果我添加
pdfView.usePageViewController(true)
PDF显示RTL起作用,默认情况下每个页面都适合屏幕大小。但是,这会使PDF不能逐页显示,并且缩放比例与其他页面不一样。
左边的页面比例与右边的当前放大页面不同。如果用户捏一页,我需要它们都具有相同的比例。
有什么办法可以解决此问题?
此外,每个页面的左上角都会显示一个图标,我不知道这是什么意思以及如何隐藏它。.
解决方法
我找到了一种使其手动显示RTL的方法。
不要使用usePageViewController(true)
,而只是从PDFDocument重新排列页面。
let doc = PDFDocument()
var getPage = pdfDocument.pageCount - 1
for i in 0..<pdfDocument.pageCount {
guard let pageRef = pdfDocument.page(at: getPage) else { fatalError() }
doc.insert(pageRef,at: i)
getPage -= 1
}
pdfView.document = doc
// Display PDF from last page if Right to Left
if (isPageRTL) {
pdfView.goToLastPage()
}
我发现,如果iOS 12和iOS 13中的PDF较大(Apple iOS 14似乎不错),Apple的PDFView将导致内存泄漏和崩溃。因此,我必须找到其他方式来显示适合我需求的PDF。