在这段SwiftUI代码中,我有一个包含搜索栏的视图,搜索栏下面是一些呈胶囊形状的筛选器标记&图像.
当点击搜索栏时,键盘向上移动视图,过滤器标签覆盖搜索栏.
我想更改代码,以便在点击搜索栏时将showingTages设置为False,以避免此UI错误
我try 在.seearble修饰符上使用.onTapGesture{},但似乎不起作用.当点击搜索栏时,如何确保不显示标记?
以下是我的代码:
struct ProductSearchView: View {
@StateObject var marketplaceModel = MarketplaceViewModel()
@State var searchText = ""
@State var product_array_status = true
@State var product_array_status_search = false
@State var product_array_status_tags = false
@State var showingTags: Bool = true
var body: some View {
ZStack {
Color("BG")
.ignoresSafeArea()
VStack {
if showingTags {
TagView()
}
if product_array_status_search {
VStack(spacing: 15) {
ScrollView(.vertical, showsIndicators: false) {
ForEach(marketplaceModel.filteredProduct.filter { ($0.product_name ?? "").contains(searchText)}, id: \.self) { product in
ProductSearchRow(productData: product)
}
}
}
.onAppear {
showingTags.toggle()
}
} else if product_array_status_tags {
VStack(spacing: 15) {
ScrollView(.vertical, showsIndicators: false) {
ForEach(marketplaceModel.product_tag_array, id: \.self) { product in
ProductSearchRow(productData: product)
}
}
}
} else {
Image("PlaceholderImage")
.resizable()
}
Spacer()
}
}
.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
.onAppear {
let defaults = UserDefaults.standard
let keyString = defaults.string(forKey: "key") ?? ""
self.marketplaceModel.fetchProductData(key: keyString)
}
.onChange(of: marketplaceModel.search, perform: { value in
// to avoid Continues Search requests....
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
if value == marketplaceModel.search && marketplaceModel.search != ""{
// Search Data....
marketplaceModel.filterData()
}
}
if marketplaceModel.search == ""{
// reset all data....
withAnimation(.linear) {
product_array_status = true
product_array_status_search = false
}
}
})
}
}
如何确保在点击.seearble提供的搜索栏时不显示TagView()?