[英]Navigation bar title is stuck
如果我為鍵盤使用一個工具欄,它里面有一個ScrollView
,它會弄亂導航欄標題,該標題只會卡在屏幕上,而不是在導航欄中移動。
有沒有人有這個問題的解決方案?
(Xcode 13.4.1)
最小的可重現代碼:
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct ContentView: View {
@State var numbers = Array(1...100).map { String($0) }
var body: some View {
NavigationView {
List($numbers, id: \.self) { $number in
TextField("", text: $number)
}
.toolbar {
ToolbarItem(placement: .keyboard) {
ScrollView(.horizontal) {
HStack {
Text("Hello")
Text("World")
}
}
}
}
.navigationTitle("Messed up title")
}
}
}
似乎您正在嘗試在鍵盤內添加 100 個工具欄項元素,這會導致性能問題並影響導航欄,這可能是 Xcode 版本兼容性較低的問題。 如果您想顯示 100 個工具欄項元素,則不要在鍵盤內添加單獨的視圖並在其上添加,然后根據鍵盤出現或消失相應地隱藏/顯示 100 個元素視圖。 因此,我修改了您的代碼,該代碼在鍵盤內添加了兩個工具欄項元素,並且似乎工作正常,沒有任何導航標題卡住問題,例如:-
var body: some View {
NavigationView {
List($numbers, id: \.self) { $number in
TextField("", text: $number)
}.toolbar {
ToolbarItem(placement: .keyboard) {
HStack {
Button("Cancel") {
print("Pressed")
}
Spacer()
Button("Done") {
print("Pressed")
}
}
}
}.navigationTitle("Messed up title")
}
}
編輯答案如果您想使用 ScrollView,而不是使用 List,請使用 ScrollView,如下所示請注意,僅當您使用低於 Xcode 14 的 Xcode 版本時,才需要進行此更改
var body: some View {
NavigationView {
ScrollView {
ForEach($numbers, id: \.self) { number in
VStack {
TextField("", text: number)
}
}
}.toolbar {
ToolbarItem(placement: .keyboard) {
ScrollView(.horizontal) {
HStack {
Text("Hello")
Text("World")
}
}
}
}.navigationTitle("Messed up title")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.