如何在 swiftui InsetGroupedListStyle 中删除 iOS 15 额外的顶部填充?

问题描述 投票:0回答:3

我在 SwiftUI 中有一个 InsetGroupedListStyle 列表,并注意到 iOS 15 中添加了额外的顶部填充。我如何控制或删除它?

List {
    Section(header: Text("Header")) {
        // some content
    }
}
.listStyle(InsetGroupedListStyle())

这是 iOS 14:

和 iOS 15:

ios swift swiftui swiftui-list
3个回答
7
投票

要解决此问题,您可以使用 headerProminence

Section("Header") {
  // some content
}
.headerProminence(.increased)

解决表格视图的问题

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

更新:我想我找到了这个特定案例的解决方案:

tableView.tableHeaderView = .init(frame: .init(x: 0, y: 0, width: 0, height: CGFloat.leastNonzeroMagnitude))

6
投票

我遇到了类似的令人沮丧的问题,这样做对我有帮助

List {
    Section(header: Text("Header")) {
        // some content
    }
}
.listStyle(PlainListStyle())

注意这改变了我标题的颜色


0
投票

我回答晚了,但是在花了近一周的时间解决这个问题后,我找到了解决我的问题的解决方案......

首先,您需要将 SwiftUIIntrospect 添加到您的项目中

List { ...
}
.listStyle(.plain)
.introspect(.list, on: .iOS(.v15)) { tableView in
    let identifier = "TableViewConfigured"
    guard tableView.focusGroupIdentifier != identifier else {
        return
    }
    tableView.focusGroupIdentifier = identifier

    tableView.sectionHeaderTopPadding = 0
}
.introspect(.list(style: .plain), on: .iOS(.v16, .v17)) { collectionView in
    let identifier = "CollectionViewConfigured"
    guard
        collectionView.focusGroupIdentifier != identifier,
        let collectionViewLayout = collectionView.collectionViewLayout as? UICollectionViewCompositionalLayout else {
        return
    }
    collectionView.focusGroupIdentifier = identifier

    let configuration = collectionViewLayout.configuration

    configuration.interSectionSpacing = -22

    collectionViewLayout.configuration = configuration
    collectionView.setCollectionViewLayout(collectionViewLayout, animated: false)
}

PS:在 iOS 16 或 17 上,如果列表的第一个元素是一个部分,它仍然会出现问题。就我而言,这不是问题,因为我的单元格在第一部分之前没有任何部分......

© www.soinside.com 2019 - 2024. All rights reserved.