【发布时间】:2019-11-23 16:47:24
【问题描述】:
我正在尝试在 HStack 和 VStack 中使用 forEach。我在其中使用 Text 并且 Text 在运行时没有出现,但 onAppear 打印值。请看一下我的代码。为什么没有出现文本?我怎样才能做到这一点?
@State var sd = ["1","2","3","4","5","6","7"]
VStack {
ForEach(0...sd.count/3) { _ in
HStack {
ForEach(0...2) { _ in
if(self.sd.isEmpty) {
} else {
Text("Test")
.onAppear() {
if(!self.sd.isEmpty) {
print("i appeared")
self.sd.removeFirst()
}
}
}
}
Spacer()
}
}
}
我想在这里实现什么?
我正在尝试创建一个最多包含 3 个文本的 HStack。我在这里使用数组仅渲染文本 7 次。
具有 7 个元素的数组的预期结果--->
想要创建一个包含 3 个 HStack 的 VStack,在前 2 个 HStack 中我想渲染 Text 3 次,在最后一个 HStack 中我只想要一个 Text。 (就像我有 7 个数组元素,这就是为什么前两个 hstack 中有 3 个文本和最后一个 hstack 中有一个)。如果数组有 10 个元素,则 3 个 Hstacks 的 3 个文本,最后一个 Stack 有 1 个文本。我无法渲染 Text,因为我的数组是 @state var,每次我从中删除 firstElement 时它都会刷新 view.body。
有什么方法可以实现我试图通过仅使用 SwiftUI 来实现的这种行为。我不想使用 UICollection 视图。
【问题讨论】:
-
三个快速问题。 (1)“我出现”执行了多少次? (2) 你想用嵌套的
ForEach循环做什么?但大多数情况下,(3)您的预期输出是什么? -
1) 七次。 2)我正在尝试获取 3 个 hstack(前两个有 3 个文本,第三个有 2 个文本)。 3) 3 个 hstacks(前两个有 3 个文本,第三个有 2 个文本)。
-
听起来并不重要,但您的数组只有七个值。 :-) 此外,您将一维数组视为二维数组。 (通常内部循环在第二个维度上工作。)抱歉重复,但 3
Stacks包含 3、3 和 2Texts。什么价值观? -
是的,我的主要问题是它的打印“我出现了”,但文本在视图中不可见。下面的答案澄清了为什么没有呈现任何内容。但我想实现 3 3 2 Hstacks。我该怎么做?
-
也许,问题是你太模糊了,我无法提供帮助。从您的评论到答案,我想知道如果您以
UIKit的方式交谈是否会对我有所帮助。 (我认为您的问题在于 Apple 上个月推出的内容,但可能更深。再次 - 但这次具体 - 每个“堆栈”应该显示什么?(它在您的问题中可能更容易表明 - 格式化 cmets 相当差。)给定您的七个值数组,它们应该如何呈现?