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

iOS 3D Touch小组件点击自动启动主App,寻求恢复原有行为方案

解决3D Touch唤起的Today小组件点击后自动打开主App的问题

我之前也碰到过完全一样的情况——升级iOS、macOS和Xcode后,通过3D Touch点击App图标唤起的Today Extension小组件,只要点击任意区域就会自动跳转到主App,但在Today视图里使用时却完全正常。后来折腾了几个方法终于搞定了,分享给你试试:

1. 拦截系统默认的点击跳转逻辑

现在系统对3D Touch唤起的小组件默认添加了点击跳转主App的规则,我们可以通过添加全屏手势识别器来拦截这个行为:

在你的TodayViewController的viewDidLoad方法里添加以下代码:

override func viewDidLoad() {
    super.viewDidLoad()
    // 添加全屏点击手势,拦截系统默认跳转
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleWidgetTap))
    tapGesture.cancelsTouchesInView = false // 确保不影响小组件内部控件的正常交互
    view.addGestureRecognizer(tapGesture)
}

@objc private func handleWidgetTap() {
    // 这里可以放置你小组件的功能逻辑,或者什么都不做
    // 核心是不要调用任何打开主App的代码,拦截系统的默认跳转
}

这个手势会优先处理点击事件,阻止系统触发跳转主App的操作,同时cancelsTouchesInView = false能保证你小组件内部的按钮、交互控件依然可以正常工作。

2. 检查Extension的Info.plist配置

打开Today Extension的Info.plist文件,查看NSExtension -> NSExtensionAttributes节点下有没有设置WidgetURL或其他与跳转相关的属性。如果存在这类属性,直接删除即可——因为它会强制点击小组件打开指定URL,进而触发主App启动。

3. 临时验证版本适配问题(可选)

如果上面的方法没生效,可以尝试把Extension的Deployment Target暂时降到你之前功能正常的版本(比如iOS 15),验证是不是新版本系统的强制行为。不过这只是临时排查手段,长期来看还是前两个方法更稳妥。

亲测第一个方法就能解决问题,你可以先试试这个,应该就能恢复原来的行为——小组件完成所有功能但不会打开主App。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:12:32