小编Jam*_*ade的帖子

在 SwiftUI 中使用 @ViewBuilder 单独修改传递到容器的子视图

在 SwiftUI 中,您可以将多个视图作为一个参数传递给另一个视图,这要归功于@ViewBuilder. 每个子视图都是单独处理的,因此在传递后,可以包含在 等中VStackHStack

我的问题是:这个容器视图是否可以单独修改传递给它的每个子视图?例如,通过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 中的任何地方都没有注意到这种模式。

ios swift swiftui viewbuilder

6
推荐指数
1
解决办法
1102
查看次数

标签 统计

ios ×1

swift ×1

swiftui ×1

viewbuilder ×1