【问题标题】:SwiftUI Vertical List Section header padding in iOS 15iOS 15 中的 SwiftUI 垂直列表部分标题填充
【发布时间】:2021-11-11 14:47:08
【问题描述】:

我有一个ListSections

    List {
        ForEach((1...3), id: \.self) { _ in
            Section(
                header: Text("My Section")
                            .font(.system(.title3))
                            .fontWeight(.bold)
                            .foregroundColor(.primary),
                content: {
                    ForEach((1...5), id: \.self) { _ in
                        Text("My Row")
                    }
                }
            )
        }
    }

这是使用 iOS 14.5 的 iPhone 8 模拟器上的结果:

这里是带有 iOS 15 的 iPhone 8 模拟器上的结果:

我希望 iOS15 列表等于 iOS14.5 之一。我可以通过将.listStyle(PlainListStyle()) 添加到List 来删除水平填充,但该部分的标题仍然具有不同的垂直填充。

有没有办法拥有与 iOS14.5 相同的垂直页眉填充?

环境:

  • iOS 15 RC
  • XCode 13 RC

【问题讨论】:

    标签: ios xcode swiftui ios15 xcode13


    【解决方案1】:

    最后,最适合我的是添加

    if #available(iOS 15.0, *) {
        UITableView.appearance().sectionHeaderTopPadding = 0
    }
    

    在 AppDelegate didFinishLaunchingWithOptions 函数中

    【讨论】:

    • 这是为 SwiftUI 设计的吗?如果是的话,你把它放在哪里?
    • @cseh_17 是的,它适用于 SwiftUi,我把它放在 AppDelegate -> didFinishLaunchingWithOptions
    【解决方案2】:

    您可以尝试在环境中设置defaultMinListHeaderHeight

    List {
    ...
    }
    .environment(\.defaultMinListHeaderHeight, 16)
    

    【讨论】:

    • 这似乎在 XCode 13 下不起作用
    【解决方案3】:

    使用.listStyle() 修饰符将列表的样式更改为GroupedListStyle

    .listStyle(GroupedListStyle())
    
    

    没有灰色背景的标题

    .listStyle(PlainListStyle())
    
    

    更多信息

    https://developer.apple.com/documentation/swiftui/liststyle

    【讨论】:

    • 它回答了我的问题,谢谢。但是我现在看到header不粘了,我再找个解决办法