我的屏幕有两个List
并排,在一个NavigationView
。布局渲染正确,我可以独立滚动两个列表。问题是,当我滚动第一个列表时,它位于导航栏后面,而没有触发对其应用背景颜色的效果。下面的 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 的错误吗?如果没有,如何使第一个列表在滚动时与导航栏正确交互?
这是一个错误。方式NavigationView
and NavigationStack
工作时,他们只考虑最后发生的List
or ScrollView
在其内容中为导航栏设置动画。
我现在能想到的唯一解决方法是:
- 隐藏导航栏
.navigationBarHidden(true)
or
.toolbar(.hidden)
(适用于 iOS 16+)修饰符
- 将导航栏固定到位
.navigationBarTitleDisplayMode(.inline)
.toolbarBackground(Color.white, for: .navigationBar)
.toolbarBackground(.visible, for: .navigationBar)
对于 iOS 16+ 或通过使用旧版 iOS 版本的 UIKit 方式UINavigationBarAppearance
- 实现您自己的导航栏,使用几何阅读器跟踪列表,并根据列表位置制作动画,但这里的努力是不值得的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)