没有部分的 SwiftUI 主列表可滚动标题视图?

Posted

技术标签:

【中文标题】没有部分的 SwiftUI 主列表可滚动标题视图?【英文标题】:SwiftUI main list scrollable header view without sections? 【发布时间】:2020-07-22 15:09:33 【问题描述】:

有没有办法在不带部分的列表标题中放置一个视图?表格视图通常有一个名为tableHeaderView 的属性,它是整个表格的标题,与节标题无关。

我正在尝试创建一个列表并能够像 tableHeaderView 一样从 UITableView 滚动它。

struct MyView: View 
    
    let myList: [String] = ["1", "2", "3"]
    
    var body: some View 
        VStack 
            MyHeader()
            List(myList, id: \.self)  element in
                Text(element)
            
        
    

【问题讨论】:

【参考方案1】:

感谢Asperi。这是我对表头的最终解决方案。

struct MyHeader: View 
    var body: some View 
        Text("Header")
    


struct DemoTableHeader: View 
    let myList: [String] = ["1", "2", "3"]

    var body: some View 
        List 
            MyHeader()
            ForEach(myList, id: \.self)  element in
                Text(element)
            
        
    

【讨论】:

【参考方案2】:

这是一个可能的方法的简单演示,其他所有内容(如样式、大小、对齐方式、背景)都是可扩展和可配置的。

使用 Xcode 11.4 / ios 13.4 测试

struct MyHeader: View 
    var body: some View 
        Text("Header")
            .padding()
            .frame(maxWidth: .infinity)
    


struct DemoTableHeader: View 
    let myList: [String] = ["1", "2", "3"]

    let headerHeight = CGFloat(24)

    var body: some View 
        ZStack(alignment: .topLeading) 
            MyHeader().zIndex(1)               // << header
                .frame(height: headerHeight)

            List 
                Color.clear                    // << under-header placeholder
                    .frame(height: headerHeight)

                ForEach(myList, id: \.self)  element in
                    Text(element)
                
            
        
    

【讨论】:

不错!但我希望标题也能随着列表滚动? 那我误会了你 - 只需删除占位符并将标题移动到 ForEach 上方的列表中。 Asperi,太棒了!那行得通。我根据您的评论在这里发布了我的答案:)

以上是关于没有部分的 SwiftUI 主列表可滚动标题视图?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:将列表添加到带有上方图标的滚动视图中

SwiftUI 将部分列表固定到底部

SwiftUI List 在任何视图更改时重置滚动

SWIFTUI:- 有没有办法在滚动滚动视图时关闭弹跳?

如何在 SwiftUI 中为列表创建标题?

SwiftUI:如何让滚动视图包含完整列表长度