SwiftUI制作一个只显示一定数量行的列表
我最近开始玩弄SwiftUI,到目前为止它还不错。然而,我提出了一个似乎找不到答案的问题 我正在尝试创建此设计: 如您所见,这里有一个tableview(列表),其中的行中有一个较小的tableview(列表)。使用IB时,任务非常简单,但使用swiftUI时,我似乎找不到一种方法将行数限制在我需要的数量,或者根据行数手动设置列表高度(请记住,这些行的高度也可以是可变的) 到目前为止,我的代码只包括创建列表和添加2个测试行:SwiftUI制作一个只显示一定数量行的列表,swiftui,ios13,swiftui-list,Swiftui,Ios13,Swiftui List,我最近开始玩弄SwiftUI,到目前为止它还不错。然而,我提出了一个似乎找不到答案的问题 我正在尝试创建此设计: 如您所见,这里有一个tableview(列表),其中的行中有一个较小的tableview(列表)。使用IB时,任务非常简单,但使用swiftUI时,我似乎找不到一种方法将行数限制在我需要的数量,或者根据行数手动设置列表高度(请记住,这些行的高度也可以是可变的) 到目前为止,我的代码只包括创建列表和添加2个测试行: List { OrderItemRow() Orde
List {
OrderItemRow()
OrderItemRow()
}
但正如您所看到的,SwiftUI会自动扩展列表以填充所有可用空间。其效果是:
我建议使用ForEach显示您的订单,使用嵌套ForEach显示订单中的项目。关键是管理提供给每个ForEach的数据,使其达到所需的项数,并为OrderHeaderRow、OrderItemRow等构建适当的行视图
struct OrdersView: View {
var body: some View {
List {
Section(header: Text("Current Order")) {
OrderHeaderRow(order: currentOrder)
ForEach(self.arrayOfAllItemsInOrder(currentOrder)) { item in
OrderItemRow(currentOrder: order, item:item)
}
OrderTotalRow(order: order)
ActionButtonsRow(order:order)
}
Section(header: Text("Previous Orders")) {
ForEach(self.arrayOfAllPreviousOrders) { order in
OrderHeaderRow(order: order)
ForEach(self.arrayOfAllItemsInOrder(order)) { item in
OrderItemRow(order: order, item:item)
}
OrderTotalRow(order: order)
ActionButtonsRow(order:order)
}
}
}
}
}
如果您知道行的高度,可以通过以下方式实现:
List(self.arrayOfAllItemsInOrder(currentOrder)){item in
OrderItemRow(当前订单:订单,项目:项目)
}
.environment(\.defaultMinListRowHeight,rowHeight)
.frame(高度:self.arrayOfAllItemsInOrder.reduce(0){i,u在i+rowHeight})
这将根据行高
计算列表的完整大小,并限制帧的高度
请注意,如果您的行大小超过
行高
,整个计算将混乱,您可能会看到一半(或缺少整个)单元格。对于此UI设计,我不会选择列表,而是OrderView的滚动视图
,您最终是如何解决的?我每一行都有一个导航链接,所以我想知道哪一行可以正常工作。问题是,如果没有设置列表高度的机制,它会自动填满整个屏幕,弄乱设计。正如你在我的代码截取中看到的,我只是用两行填充这个列表。有没有办法限制行数?或者手动设置高度?看起来您可能试图强制SwiftUI列表执行它不打算执行的操作。不要将订单页眉和订单页脚视图放在列表之外,只需将它们列在列表中即可。仅供参考,列表中的行不必都是相同类型的视图。我将编辑我的答案,以显示一些伪代码来演示我所说的内容。