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
相关产品推荐
相关产品推荐

