Я следовал этому руководству, чтобы добавить SearchBar в свое приложение SwiftUI: http://blog.eppz.eu/swiftui-search-bar-in-the-navigation-bar/ Он в основном использует настраиваемый модификатор для добавления SearchBar в NavigationView:
extension View {
func add(_ searchBar: SearchBar) -> some View {
return self.modifier(SearchBarModifier(searchBar: searchBar))
}
}
Поскольку я мой NavigationView оборачиваю TabView, и я хочу отображать SearchBar только на указанной вкладке (например, вторая вкладка имеет SearchBar, а другие нет). Я хотел бы скрыть или удалить представление searchBar, но не нашел способа сделать это. Пожалуйста помоги
Вот как я оборачиваю NavigationView за пределами TabView:
struct MainView: View {
@ObservedObject var searchBar = SearchBar()
@State private var selectedTab :Int = 0
private var pageTitles = ["Home", "Customers","Sales", "More"]
var body: some View {
NavigationView{
TabView(selection: $selectedTab, content:{
HomeView()
.tabItem {
Image(systemName: "house.fill")
Text(pageTitles[0])
}.tag(0)
CustomerListView(searchText: searchBar.text)
.tabItem {
Image(systemName: "rectangle.stack.person.crop.fill")
Text(pageTitles[1])
}.tag(1)
SaleView()
.tabItem {
Image(systemName: "tag.fill")
Text(pageTitles[2])
}.tag(2)
MoreView()
.tabItem {
Image(systemName: "ellipsis.circle.fill")
Text(pageTitles[3])
}.tag(3)
})
.add(searchBar, when: selectedTab == 1)
}
}
}
//Compile error: Function declares an opaque return type, but the return statements in its body do not have matching underlying types
extension View {
func add(_ searchBar: SearchBar, when: Bool) -> some View {
if(when == true)
return self.modifier(SearchBarModifier(searchBar: searchBar))
else
return self
}
}