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

SwiftUI:如何在.searchable激活时隐藏TagView组件?

解决SwiftUI搜索栏点击时隐藏标签的问题

要实现点击.searchable搜索栏时隐藏TagView,不能直接给.searchable加.onTapGesture(它是修饰符而非视图,手势不会生效),可以用以下两种可靠方式解决:

方法一:利用.searchable的编辑状态回调

直接在.searchable中添加编辑状态变化的处理逻辑,当搜索栏被激活时隐藏标签,结束编辑且无搜索内容时恢复显示:

修改你的.searchable修饰符:

.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always), onEditingChanged: { isEditing in
    if isEditing {
        // 搜索栏被点击激活,隐藏标签
        showingTags = false
    } else {
        // 结束编辑且搜索文本为空时,恢复显示标签
        if searchText.isEmpty {
            showingTags = true
        }
    }
})

方法二:用@FocusState跟踪搜索栏焦点

通过焦点状态变量绑定搜索栏,监听焦点变化来控制标签显示:

  1. 在视图中新增焦点状态变量:
@FocusState private var isSearchFieldFocused: Bool
  1. 修改搜索栏相关代码:
.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
.focused($isSearchFieldFocused)
.onChange(of: isSearchFieldFocused) { isFocused in
    if isFocused {
        showingTags = false
    } else {
        if searchText.isEmpty {
            showingTags = true
        }
    }
}

额外优化

你现有代码中,product_array_status_search对应的视图里有.onAppear { showingTags.toggle() },这会和搜索状态的控制逻辑冲突,建议移除这行代码,统一由搜索状态管理标签的显示/隐藏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:54:50