在 SwiftUI 中,您可以将多个视图作为一个参数传递给另一个视图,这要归功于@ViewBuilder. 每个子视图都是单独处理的,因此在传递后,可以包含在 等中VStack。HStack
我的问题是:这个容器视图是否可以单独修改传递给它的每个子视图?例如,通过Spacer在每个子视图之间添加一个。
这是我正在寻找的等效功能:
struct SomeContainerView<Content: View> {
init(@ViewBuilder content: @escaping () -> Content) {
self.content = content()
}
let content: Content
var body: some View {
HStack {
ForEach(content.childViews, id: \.id) { child in
// Give each child view a background
// Add a Spacer in between each child view
// Conditional formatting
// Etc.
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我相信这是可能的,因为标准 SwiftUI 容器视图可以影响传递给它们的子视图的外观和布局。除非这是通过 SwiftUI 的内部功能实现的?
解决这个问题的一种方法可能是传递多个视图参数而不是一个,尽管如果需要传递许多视图,这会不灵活且混乱。视图数组似乎也没有意义,因为我在 SwiftUI 中的任何地方都没有注意到这种模式。