我在 SwiftUI 中有一个 InsetGroupedListStyle 列表,并注意到 iOS 15 中添加了额外的顶部填充。我如何控制或删除它?
List {
Section(header: Text("Header")) {
// some content
}
}
.listStyle(InsetGroupedListStyle())
这是 iOS 14:
和 iOS 15:
要解决此问题,您可以使用 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))
我遇到了类似的令人沮丧的问题,这样做对我有帮助
List {
Section(header: Text("Header")) {
// some content
}
}
.listStyle(PlainListStyle())
注意这改变了我标题的颜色
我回答晚了,但是在花了近一周的时间解决这个问题后,我找到了解决我的问题的解决方案......
首先,您需要将 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 上,如果列表的第一个元素是一个部分,它仍然会出现问题。就我而言,这不是问题,因为我的单元格在第一部分之前没有任何部分......