。可搜索修饰符在 watchOS 10.2、10.3 上不起作用

问题描述 投票:0回答:1

因此,我们有一个正在生产的 watchOS 应用程序,其中包含导航堆栈内的列表和可搜索修饰符。

一切运行良好,但自从 watchOS 10.2 发布后,搜索栏就停止工作了。

您可以查看、点击和编写查询,但与状态变量的绑定不起作用,并且无法读取用户的查询。

我编写了一个非常简单的演示视图来展示该问题。我在运行 watchOS 10.2 的 Series 7 Apple Watch 上尝试过。

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)
        .onChange(of: searchText) { _, searchText in
            showResult = true
        }
    }
}

顺便说一下,

@State searchText
上或
.onChange
修改器内的断点永远不会被触发。

我有三个问题:

  1. 我在这里做错了什么吗?这种搜索字段的方式以前是有效的,但也许我做错了什么,它一开始就不应该有效。
  2. 您也注意到这个问题了吗?我提供的代码是否也显示了您端的无响应搜索?
  3. 如何让它发挥作用?
swiftui apple-watch watchos
1个回答
0
投票

我决定对我的应用程序进行更新,并用简单的 TextField 替换 Searchable 修饰符。这并不是很多工作,因为大多数可搜索逻辑都可以重用。

优点
  • 现在可以使用了。
缺点
  • 不再有放大镜图标,而且您实际上无法在 watchOS 中添加放大镜图标(即使使用标签)
  • 造型不太一样。背景颜色比列表中的其他单元格稍浅。
List {
     TextField(text: $searchText) {
         Text("Search", comment: "Search text field")
     }
}
.onChange(of: searchText) { _, searchInput in
    search(searchInput)
}

如果您想为以前的系统版本的用户提供更好的体验,您还可以使用

if #available(watchOS 10.2, *)
有条件地使用文本字段而不是可搜索的。

© www.soinside.com 2019 - 2024. All rights reserved.