![](/img/trans.png)
[英]How to remove bottom/top item padding from SwiftUI List in Mac OS
[英]Remove top padding from `List` in SwiftUI
我在 Stack Overflow 上看到过类似的问题,但没有一个能够回答我的问题。
我创建了一个List
,但我想删除List
内容上方的填充空间(用红色箭头标记)。 使用GroupedListStyle
时如何删除它?
这是通过fullscreenCover
显示的NavigationView
内的VStack
内的List
:
var body: some View {
NavigationView {
VStack {
taskEventPicker
myList
}
.navigationBarTitle("Add Task", displayMode: .inline)
}
}
其中taskEventPicker
是一个分段的Picker
(以绿色框起来):
var taskEventPicker: some View {
Picker("Mode", selection: $selection) { /* ... */ }
.pickerStyle(SegmentedPickerStyle())
.padding()
}
和myList
是有问题的形式(黄色框):
var myList: some View {
List { /* ... */ }
.listStyle(GroupedListStyle())
}
我试过的
UITableView.appearance().tableHeaderView
设置为空框架UITableView.appearance().contentInset.top = -35
listRowInsets
(这会影响所有列表行) 注意:我正在寻找可以适用于GroupedListStyle
的答案。 我了解PlainListStyle
不会出现此问题。 默认listStyle
也会出现此填充问题。
谢谢您的帮助!
Xcode 版本:12.5
首先,我想说GroupedListStyle
正在按预期工作。
在 iOS 上,分组列表样式比普通样式显示更大的页眉和页脚,这在视觉上拉开了不同部分的成员的距离。
你说你已经尝试过了,但它对我有用(Xcode 12.5.1):
List { ... }
.onAppear(perform: {
UITableView.appearance().contentInset.top = -35
})
您还可以隐藏列表标题,方法是使用ZStack
,List 位于堆栈底部, Picker
位于顶部。 Picker 确实具有透明度,因此您还必须添加一个不透明的视图作为Picker
的背景。
var body: some View {
NavigationView {
ZStack(alignment: .top) {
List { ... }
.listStyle(.grouped)
.padding(.top, 30)
Color.white
.frame(height: 65)
Picker { ... }
.pickerStyle(.segmented)
.padding()
}
.navigationBarTitle("Add Task", displayMode: .inline)
}
}
据我所见,这与PlainListStyle
看起来一样,但我认为您有特定的理由想要使用GroupedListStyle
。
我有一个类似的设置,我在 VStack 中有一些视图和一个列表,并且我有一个不想要的空间出现在我的列表顶部。 在我的情况下,我需要将 VStack 间距设置为 0,这解决了这个问题,因为它实际上只是与 VStack 的间距。
VStack(spacing: 0) { ... }
已接受答案的contentInsent
部分工作得非常好,除非例如在我的情况下,在导航堆栈的末尾,您想在包含带有navigationBarTitleDisplayMode
设置为.inline
的List
的详细视图中使用它。 当使用另一个List
将navigationBarTitleDisplayMode
设置为.large
在堆栈中导航回视图时, List
内容和NavigationBar
非常交错。 他们可能还不如做任何navigationBarTitleDisplayMode
设置的事情。
在我的情况下切换到listStyle(.plain)
不是一个可行的选择,因为然后在详细视图中,我失去了与 List 的EditMode
之间的精美动画内置转换,这似乎只存在于分组的listStyle
品种中。
最后,经过几天的挫折后,我发现tableHeaderView
是最适合我的问题的方法 - 当然,它同样适用于解决原始问题。 这一切都在这里......:
...在这句话中:
“将视图分配给此属性 [即tableHeaderView
] 时,将该视图的高度设置为非零值”
所以我喜欢:
List {
// bla bla bla
}
.listStyle(.grouped)
.onAppear {
let tableHeaderView = UIView(frame: .zero)
tableHeaderView.frame.size.height = 1
UITableView.appearance().tableHeaderView = tableHeaderView
}
就这么简单。 希望它也能帮助你!
extension View {
/// Clear tableview and cell color
func tableClearColor() {
let tableHeaderView = UIView(frame: .zero)
tableHeaderView.frame.size.height = 0.5
UITableView.appearance().tableHeaderView = tableHeaderView
}
}
List {
...
}
.headerTopPadding(padding: 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.