用途:为 SwiftUI 列表或集合添加搜索,实现边输入边过滤或提交式搜索,添加自动补全建议、按类别缩小结果的作用域、结构化查询令牌,以及程序化控制搜索焦点,并排查“搜索字段不出现”等问题。iOS 26 的底部对齐搜索、最小化工具栏、Tab(role: .search) 等特性另见 axiom-swiftui-26-ref。
主要能力:.searchable(text:placement:prompt:) 将搜索字段交给最近的导航容器(NavigationStack、NavigationSplitView、TabView)渲染;通过环境读取 isSearching 与 dismissSearch;suggestions 闭包配合 .searchCompletion() 实现建议填充;onSubmit(of: .search) 处理提交;iOS 16+ 支持 .searchScopes 与 .searchable(text:tokens:);iOS 16.4+ 支持作用域激活参数;iOS 17+ 支持 isPresented 与 suggestedTokens;iOS 18+ 支持 .searchFocused($isFocused) 程序化聚焦。
使用方式:在导航容器内的视图上附加 .searchable(text: $query),根据绑定的文本过滤或查询数据;建议项需加 .searchCompletion() 才能点击填充;isSearching 必须从带 .searchable 视图的子视图读取;dismissSearch 需在搜索视图层级内调用;仅需关闭搜索用 dismissSearch,需要主动打开搜索用 .searchFocused。
适用场景:联系人、设置等本地快速过滤;App Store、网页搜索等网络或昂贵查询的提交式搜索;地图、购物等本地建议加提交触发服务端的组合模式。
限制:placement 偏好可能被系统忽略,需在目标平台实测;各平台默认行为不同(iOS 搜索栏默认随滚动移出、macOS 工具栏常驻、watchOS 以听写为主、tvOS 为标签式搜索);令牌元素必须符合 Identifiable;资料未提供收费、价格或效果数据。