我有一個CustomSearchBar看起來像這樣的視圖

但是,當我用 包裹它時NavigationLink,占位符文本將居中。用戶輸入也將居中。

使用時如何保持領先對齊NavigationLink?
我的代碼結構如下所示:
enum Tab {
case social
}
struct MainAppView: View {
@State var selection: Tab = .social
var body: some View {
TabView(selection: $selection) {
ZStack{
CustomButton()
NavigationView { SocialView() }
}.tabItem{Image(systemName: "person.2")}.tag(Tab.social)
// other tabs....
}
struct SocialView: View {
// ...
var body: some View {
GeometryReader{ geometry in
VStack{
NavigationLink(destination: Text("test")) {
CustomSearchBar()
//...
}.navigationBarHidden(true)
.navigationBarTitle(Text(""))
}
}
}
}
struct CustomSearchBar: View {
var body: some View {
VStack{
HStack {
SearchBarSymbols(// some binding arguments)
CustomTextField(// some binding arguments)
CancelButton(// some binding arguments)
}
.padding(.vertical, 8.0)
.padding(.horizontal, 10.0)
.background(Color("SearchBarBackgroundColor"))
.clipShape(Capsule())
}
.padding(.horizontal)
}
}
struct CustomTextField: View {
var body: some View {
TextField("friend name", text: $searchText)
.frame(alignment: .leading)
.onTapGesture {
// some actions
}
.foregroundColor(Color("SearchBarSymbolColor"))
.accentColor(Color("SearchBarSymbolColor"))
.disableAutocorrection(true)
}
}
uj5u.com熱心網友回復:
您的代碼存在的問題是:
- 您的導航視圖包含搜索欄位。這意味著被推送的任何新視圖都將覆寫搜索欄位。
- 您的搜索欄位位于導航鏈接內。這里存在相互沖突的互動,因為它有效地將欄位轉換為按鈕,即點擊搜索欄位與點擊導航鏈接。
解決方案:
將導航視圖移動到文本欄位下方,這樣新視圖就會出現而不會覆寫它。然后更改導航鏈接,以便通過在編輯搜索欄位時觸發的系結激活它:
struct SocialView: View {
@State private var text: String = ""
@State private var isActive: Bool = false
var body: some View {
GeometryReader{ geometry in
VStack {
CustomTextField(searchText: $text, isActive: $isActive)
.padding(.vertical, 8.0)
.padding(.horizontal, 10.0)
.background(Color("SearchBarBackgroundColor"))
.clipShape(Capsule())
NavigationView {
NavigationLink(isActive: $isActive, destination: { Text("test") }, label: { EmptyView() })
}
}
}
}
}
struct CustomTextField: View {
@Binding var searchText: String
@Binding var isActive: Bool
var body: some View {
TextField("friend name", text: $searchText) { editing in
self.isActive = editing
} onCommit: {
}
.frame(alignment: .leading)
.disableAutocorrection(true)
}
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/349780.html
標籤:迅速 迅捷 swiftui-navigationlink swiftui-导航视图
