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

PDFKit - PdfView won't be RTL without usePageViewController()

我想水平显示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
        }

但是 displaysRTL 不起作用,默认比例不会显示整个单页,而是适合 PDF 页面高度(页面右侧会超出屏幕)。

如果我加上

pdfView.usePageViewController(true)

PDF displayRTL 有效,默认情况下每页都适合屏幕大小。但是这样会使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()
} 

我发现如果 PDF 在 iOS 12 和 iOS 13 中很大(iOS 14 似乎没问题),Apple 的 PDFView 会发生内存泄漏和崩溃。所以我必须找到其他方式来显示适合我需要的 PDF。