swift - 修复了导航视图中列表视图上方的视图
问题描述
如何在 SwiftUI 的 NavigationView 中的 List 视图上方获得固定(非滚动)视图?
第一张照片显示了我到目前为止尝试实现/拥有的目标。但是,第二张图片显示了如果我下拉会发生什么,标题会滑到固定内容上方。
使用 List 上的偏移量和 ZStack 我接近但 NavigationView 标题在下拉列表时一直在固定视图上方滚动。
虽然我认为这是一个更普遍的问题,但为了不冒这个问题被关闭的风险,这里是我的代码:
NavigationView {
ZStack{
List {
/* .. */
}
.listStyle(PlainListStyle())
.offset(x: 0, y: showFilter ? 100 : 0)
if showFilter {
VStack {
HStack {
Button(action: {
}, label: {
Text("Button")
})
.padding(5)
.background(Color(red: 238/255, green: 238/255, blue: 239/255))
.cornerRadius(5)
.padding()
Spacer()
}
Spacer()
}
}
}
.navigationBarItems(trailing:
Button(action: {
// initial
self.showFilter.toggle()
// completely different, odd behaviour (navigation title never fades away)
// withAnimation{ self.showFilter.toggle() }
}) {
Image(systemName: "line.horizontal.3.decrease.circle")
}
)
.navigationBarTitle("List")
}
解决方案
偏移在这里是弱方法,因为当显示过滤器并且项目超过屏幕区域时,用户将看不到列表中的最后一行。
您可以考虑将带有部分的变体作为占位符(它是粘性的并且不与标题重叠)用于过滤器(可能带有一些自定义按钮样式),因此基于您的代码快照的简单演示如下所示。
使用 Xcode 12 / iOS 14 测试
NavigationView {
List {
Section(header: Group {
if showFilter {
VStack {
HStack {
Button(action: {
}, label: {
Text("Button")
})
.padding(5)
.background(Color(red: 238/255, green: 238/255, blue: 239/255))
.cornerRadius(5)
.padding()
Spacer()
}
Spacer()
}
}
}) {
ForEach(0..<20) { i in
Text("Item \(i)")
}
}}
.listStyle(PlainListStyle())
推荐阅读
- scala - 在 Spark 和 Scala 中创建数据集的问题
- macos - 如何在 Mac 上安装 Haskell
- terraform - Terraform 不断强制重新创建资源(删除然后创建)
- laravel - 这里有没有人遇到过诸如 auth::user() 之类的问题让我们感到困惑?
- python - 如何使排序函数忽略某些字符?
- spring-boot - springboot 2.2.7如何配置JWT认证?无法扩展 WebSecurityConfigurerAdaptor
- python - train.py:错误:需要以下参数:exp_name
- css - 开发工具正确显示 CSS 字体但显示的字体不正确
- r - 如何解决这个 R 错误:在 thdim[i] <- `*vtmp*` 中:要替换的项目数不是替换长度的倍数
- python - 损坏的更新 Conda:AttributeError:'NoneType' 对象没有 matplotlib 的属性 'loader'