You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift PDFKit中PDFView.currentDestination与go(to)行为不一致问题

注意: 该问题目前尚未完全解决,已标记的答案提供了可行的临时方案,仅在应用存活期间生效,仍欢迎大家贡献更多解决方案!

背景

我正在开发一款包含全屏PDFView的应用,需要在视图退出前记录用户浏览PDF文档的位置,方便用户后续回到上次阅读位置继续浏览。

实现逻辑

该应用简化后是基于PDFKit.PDFView的PDF阅读器,故事板中包含一个绑定到PDFView子类DocumentView(遵循UIViewController协议)的UIView,视图初始化流程如下:

viewDidLoad中的代码:

let PDF: PDFDocument = GetPDFFromServer()
DocumentView.document = PDF!
DocumentView.autoScales = true
... (其他配置)

// 设置PDF跳转目标位置
let Destination: PDFDestination = GetStoredDestination()
// 存在问题的代码
DocumentView.go(to: Destination)

viewWillDisappear中的代码:

StoreDestination(DocumentView.currentDestination)
问题与测试验证

实际运行时代码没有达到预期效果,视图无法回到之前记录的浏览位置。
调试后我发现问题可能出自DocumentView.go(to destination: PDFDestination)和DocumentView.currentDestination的行为不一致。
为了排除存储位置时出错的可能性,我用多页文档运行了如下测试代码:

viewDidLoad中新增代码:

Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { _ in
    DispatchQueue.main.async {
        self.DocumentView.go(to:self.DocumentView.currentDestination!)
    }
})

预期与实际行为

预期结果:文档位置应该保持不变,代码每1秒跳转到当前浏览位置,按照官方文档对currentDestination的定义,该操作不会产生任何效果。
实际结果:代码运行后,页面会每次向下滚动固定偏移量。
该问题在iPadOS 14.5模拟器、运行iPadOS 15的iPad Air(第4代)上均可复现。

请问可能是什么原因导致的该问题?


内容的提问来源于stack exchange,提问作者Lincoln Yan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:36:04