我有以下代码:
var body: some View {
VStack(alignment: .center, content: {
Spacer()
List {
Section {
Text("Row 1")
Text("Row 2")
} header: {
Text("Header")
.font(.title3)
.padding()
} footer: {
Text("Footer")
.font(.body)
.padding()
}
}
.listStyle(.insetGrouped)
Spacer()
})
.frame(maxWidth: .infinity, maxHeight: .infinity)
.environment(\.defaultMinListRowHeight, 50)
}
字符串
问题是,无论我添加多少太空族,列表总是位于最上方,我该如何将列表置于超级视图的中心位置?
1条答案
按热度按时间kknvjkwl1#
似乎
List
报告其理想高度为0,这不是很有帮助。这防止了.fixedSize
被用来限制其理想高度。基于其内容的理想高度执行其布局的自定义Layout
也将不起作用(这是一个耻辱)。然而,另一种找到
List
所需高度的方法是使用GeometryReader
来检查列表中项目的相对位置,特别是页脚。然后可以使用此方法为List
设置maxHeight
:字符串
的数据
你会注意到全局坐标空间被用来寻找页脚的位置,所以
List
的高度是通过减去顶部安全区域内插的高度来计算的。这些内插是由VStack
周围的另一个GeometryReader
测量的。我想通过使用
List
的坐标空间可以避免外部的GeometryReader
。但是,我发现List
中的项目(或者至少是部分页脚)不能引用容器的坐标空间,所以它总是默认为全局坐标空间。这意味着,如果
List
不是布局中的第一个项目,那么当从页脚的位置计算List
的高度时,您需要减去它之前的任何项目的高度。