如何从 SwiftUI 中的 NavigationView 中删除搜索栏?
Posted
技术标签:
【中文标题】如何从 SwiftUI 中的 NavigationView 中删除搜索栏?【英文标题】:How to remove a searchbar from NavigationView in SwiftUI? 【发布时间】: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
【问题讨论】:
【参考方案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 时,它似乎永久可见以上是关于如何从 SwiftUI 中的 NavigationView 中删除搜索栏?的主要内容,如果未能解决你的问题,请参考以下文章