PDFKit-如果没有usePageViewController,PdfView将不会是RTL

问题描述

我要水平显示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不能逐页显示,并且缩放比例与其他页面不一样。

result after adding usePageViewController(true)

左边的页面比例与右边的当前放大页面不同。如果用户捏一页,我需要它们都具有相同的比例。

有什么办法可以解决此问题?

此外,每个页面的左上角都会显示一个图标,我不知道这是什么意思以及如何隐藏它。.

解决方法

我找到了一种使其手动显示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。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...