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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:48:01