簡體   English   中英

導航欄標題卡住

[英]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")
        }
    }
}

亂七八糟的標題

我復制/粘貼並運行了您的代碼。 結果與您提供的圖像不同。 我正在使用 Xcode 14、iOS 16。

在此處輸入圖像描述

似乎您正在嘗試在鍵盤內添加 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM