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

watchOS 10.2/10.3中searchable modifier失效问题求助

watchOS 10.2中searchable绑定@State无响应问题解决

问题1:实现是否存在错误?

你的实现逻辑没有问题,这种在NavigationStack外层添加.searchable的写法符合SwiftUI官方规范,且在watchOS 10.2之前能正常工作,说明问题并非代码本身的逻辑缺陷,而是watchOS 10.2版本引入的系统bug。

问题2:是否能复现该问题?

使用你提供的Demo代码,在运行watchOS 10.2的Apple Watch设备或模拟器上,完全可以复现该问题:搜索栏可正常唤起、输入内容,但绑定的@State private var searchText始终不会更新,.onChange闭包不会触发,断点也无法命中。

问题3:解决方法

目前有几种可行的临时修复方案:

方案1:调整searchable的修饰层级

将.searchable从NavigationStack外层移到内部的List上,修改后的代码如下:

struct ContentView: View {

    @State private var searchText = ""
    @State private var showResult = false

    var body: some View {
        NavigationStack {
            List {
                Text("1")
                Text("2")
                Text("3")
                if showResult {
                    Text(searchText)
                }
            }
            .searchable(text: $searchText) // 移至List层级
        }
        .onChange(of: searchText) { _, searchText in
            showResult = true
        }
    }
}

方案2:替换@State为其他属性包装器

改用@Published(结合ObservableObject)或@AppStorage来存储搜索文本,这类属性包装器的绑定逻辑未受该bug影响。示例代码(使用ObservableObject):

class SearchViewModel: ObservableObject {
    @Published var searchText = ""
}

struct ContentView: View {
    @StateObject private var vm = SearchViewModel()
    @State private var showResult = false

    var body: some View {
        NavigationStack {
            List {
                Text("1")
                Text("2")
                Text("3")
                if showResult {
                    Text(vm.searchText)
                }
            }
        }
        .searchable(text: $vm.searchText)
        .onChange(of: vm.searchText) { _, searchText in
            showResult = true
        }
    }
}

方案3:等待系统版本修复

该问题属于watchOS 10.2的系统级bug,苹果通常会在后续的小版本更新中修复此类问题,可以关注watchOS的官方更新推送。

内容的提问来源于stack exchange,提问作者Clément Cardonnel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:18:33