[英]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.