【问题标题】:How to remove a searchbar from NavigationView in SwiftUI?如何从 SwiftUI 中的 NavigationView 中删除搜索栏?
【发布时间】:2021-04-22 06:03:43
【问题描述】:

我按照本教程在我的 SwiftUI 应用程序上添加了一个 SearchBar: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
        }
    }

【问题讨论】:

    标签: swiftui swiftui-navigationview


    【解决方案1】:

    尝试使其成为视图生成器(或在Group {} 中包装条件)

    extension View {
    
        @ViewBuilder
        func add(_ searchBar: SearchBar, when: Bool) -> some View {
            if when == true {
               self.modifier(SearchBarModifier(searchBar: searchBar))
            } else {
               self
            }
        }
    }
    

    【讨论】:

    • 应用程序现在可以编译并运行,但 SearchBar 仍显示在其他选项卡上。当它添加到 NavigationView 时,它似乎永久可见
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    相关资源
    最近更新 更多