如何最小化 NavigationView 中的 SearchBar 与其上方的 Text 视图之间的空间?
Posted
技术标签:
【中文标题】如何最小化 NavigationView 中的 SearchBar 与其上方的 Text 视图之间的空间?【英文标题】:How do I minimize the space between a SearchBar in a NavigationView and the Text views above it? 【发布时间】:2021-12-26 09:39:36 【问题描述】:我试图在 NavigationView 中的 SearchBar 上方放置两个 Text 视图。有没有办法最小化 SearchBar 和它上面的 Text 视图之间的空间? See screenshot.
另外,这样我的代码是最优的还是我可以在一个中实现所有元素?
在下面找到我目前所做的示例。
import SwiftUI
struct HomeView: View
@State private var searchText = ""
var body: some View
VStack(alignment: .leading)
Text("Hi There!")
.font(.largeTitle)
.fontWeight(.heavy)
.multilineTextAlignment(.leading)
.foregroundColor(Color(red: 0.388, green: 0.231, blue: 1.0))
.padding([.top, .leading])
Text("Are you ready to work out?")
.fontWeight(.heavy)
.bold()
.foregroundColor(.gray)
.padding(.leading)
NavigationView
Text("")
.navigationTitle("Your Plans")
.searchable(text: $searchText)
struct SettingsView: View
var body: some View
Text("Your Profile")
.font(.largeTitle)
.fontWeight(.heavy)
.multilineTextAlignment(.leading)
.foregroundColor(Color(red: 0.388, green: 0.231, blue: 1.0))
.position(x: 125, y: 70)
struct ContentView: View
var body: some View
TabView
HomeView()
.tabItem
Text("Training")
.foregroundColor(Color(red:0.388, green: 0.231, blue: 1.0))
SettingsView()
.tabItem ()
Image(systemName: "slider.vertical.3")
.foregroundColor(Color(red: 0.388, green: 0.231, blue: 1.0))
struct ContentView_Previews: PreviewProvider
static var previews: some View
ContentView()
.preferredColorScheme(.dark)
【问题讨论】:
【参考方案1】:您可以执行以下操作,而不是使用 NavigationView:
struct ContentView: View
@State private var searchText = ""
var body: some View
VStack(alignment: .leading, spacing: 40)
VStack(alignment: .leading)
Text("Hi There!")
.font(.largeTitle)
.fontWeight(.heavy)
.multilineTextAlignment(.leading)
.foregroundColor(Color(red: 0.388, green: 0.231, blue: 1.0))
Text("Are you ready to work out?")
.fontWeight(.heavy)
.bold()
.foregroundColor(.gray)
VStack(alignment: .leading, spacing: 3)
Text("Your Plans")
.font(.largeTitle)
.fontWeight(.heavy)
SearchBar(text: $searchText)
Spacer()
.padding()
struct SearchBar: View
@Binding var text: String
@State private var isEditing = true
var body: some View
HStack(spacing: 4)
Image(systemName: "magnifyingglass")
.foregroundColor(.secondary)
TextField("Search", text: $text)
.onTapGesture
self.isEditing = true
.frame(height: 45)
.padding(.horizontal, 8)
.background(Color(.systemGray6))
.cornerRadius(15)
PS:为简洁起见,我特意让 SearchBar 视图变得简单。您应该在生产应用程序中为其添加更多功能。
【讨论】:
以上是关于如何最小化 NavigationView 中的 SearchBar 与其上方的 Text 视图之间的空间?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NavigationView 中设置列表的背景颜色
如何使用 SwiftUI 消除嵌套 NavigationView 中的空间
如何从 SwiftUI 中的 NavigationView 中删除搜索栏?
如何在没有 NavigationView 的情况下处理 sencha 触摸应用程序中的后退按钮?
如何在没有 SwiftUI 中的 NavigationButton 的情况下导航到 NavigationView 中的另一个视图?