SwiftUI实现WebView截屏录屏检测时模拟器无法识别截屏问题
问题排查结果
你写的截屏/录屏监听代码本身逻辑没有问题,无法触发控制台输出的核心原因和解决方法如下:
1. 核心限制:iOS模拟器不触发对应系统通知
UIApplication.userDidTakeScreenshotNotification 是仅在真机上才会触发的系统通知:只有用户在真机按下物理截屏组合键时,系统才会发送该通知。模拟器内通过快捷键Command+S、或者macOS系统自带截屏工具截取模拟器画面的操作,都不会触发这个通知。
同样UIScreen.capturedDidChangeNotification 在模拟器上也存在大概率不触发的问题,两类功能都必须使用真机测试才能验证原生触发场景的有效性。
2. 其他可排查问题
如果真机测试依然没有输出,可以检查以下两点:
- 确认
WebContentView已经正常加载到当前的视图层级中,如果视图没有完成渲染,onReceive的监听回调不会生效。 - 可以尝试把两个通知监听的逻辑移到外层父视图、甚至App的根视图上,排除WebView自身的事件处理逻辑拦截了通知回调的可能性(该情况出现概率极低,可作为兜底排查项)。
3. 开发阶段调试技巧
如果暂时没有真机,可以手动模拟通知触发,验证你写的业务逻辑是否正确:
你可以在页面上加一个临时测试按钮,点击时执行以下代码手动发送通知:
// 模拟用户截屏通知 NotificationCenter.default.post(name: UIApplication.userDidTakeScreenshotNotification, object: nil) // 模拟录屏状态变更通知 NotificationCenter.default.post(name: UIScreen.capturedDidChangeNotification, object: nil)
如果手动触发后控制台能正常输出对应日志,就说明你的原有代码逻辑完全正确,后续只需用真机测试系统原生触发场景即可。
内容的提问来源于stack exchange,提问作者Ido Golan
相关产品推荐
相关产品推荐

