[英]SwiftUI: unexpected behavior with two List side by side and a NavigationView
我有一個屏幕,在NavigationView
中並排有兩個List
。 布局正確呈現,我可以獨立滾動兩個列表。 問題是,當我滾動第一個列表時,它會在導航欄后面移動,而不會觸發對其應用背景色的效果。 這是一個顯示正在發生的事情的 gif:
這是我用於此視圖的代碼:
struct ContentView: View {
var body: some View {
NavigationView {
HStack(spacing: 0) {
List {
Section(header: Text("Header left")) {
ForEach(0..<600) { integer in
Text("\(integer)")
}
}
}
.listStyle(InsetGroupedListStyle())
.frame(minWidth: 0, maxWidth: .infinity)
List {
Section(header: Text("Header right")) {
ForEach(0..<400) { integer in
Text("\(integer)")
}
}
}
.listStyle(InsetGroupedListStyle())
.frame(minWidth: 0, maxWidth: .infinity)
}
.navigationTitle("Example")
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
這會是 SwiftUI 錯誤嗎? 如果沒有,我怎樣才能使第一個列表在滾動時與導航欄正確交互?
我最終禁用了UINavigationBar
的大標題和透明度。
import Introspect
@State private var navigationBar: UINavigationBar?
HStack(spacing: 0) {
...
}
.navigationBarTitleDisplayMode(.inline)
.introspectNavigationController {
$0.navigationBar.scrollEdgeAppearance = $0.navigationBar.standardAppearance
navigationBar = $0.navigationBar
}
.onDisappear {
navigationBar?.scrollEdgeAppearance = nil
navigationBar = nil
}
要訪問UINavigationController
,我使用了 SwiftUI Introspect lib
這是一個錯誤。 NavigationView
和NavigationStack
的工作方式,它們只考慮其內容中最后出現的List
或ScrollView
來為導航欄設置動畫。
我現在能想到的唯一解決方法是:
.navigationBarHidden(true)
或.toolbar(.hidden)
(對於 iOS 16+)修飾符隱藏導航欄.navigationBarTitleDisplayMode(.inline)
.toolbarBackground(Color.white, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
對於 iOS 16+ 或通過玩UINavigationBarAppearance
的 UIKit-ish 方式對於舊的 iOS 版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.