如何在SwiftUI中使用视图提供自定义视图?

时间:2020-11-10 04:33:53

标签: swiftui

我有一个CustomVStackView(),可以在ContentView()中使用它,我的目标 是为了能够将CustomVStackView()与ContentView()中的其他视图一起使用)。

代码在这里,有问题!

    struct ContentView: View {
 
    
    var body: some View {

        CustomVStackView(inPutView: Text("Hello").font(Font.largeTitle) )
        
    }
}


struct CustomVStackView: View {
    

    
    var inPutView: View = EmptyView()
    
    var body: some View {
        

        VStack
        {
            inPutView
 
        }.padding().background(Color.purple)
        
        
    }
}

PS:我知道AnyView(),但是我想用像Text()或Circle()这样的普通View()来喂我的inPutView。 。

1 个答案:

答案 0 :(得分:1)

您必须使用泛型才能传递任何任意视图。在这种情况下,CustomVStackView将具有符合Content的通用类型View

如果您还对参数使用@ViewBuilder,则CustomVStackView的用户将能够对内部视图使用与常规VStack相同的语法(并且整个SwiftUI):

struct CustomVStackView<Content: View>: View {
    
    private var inputView: () -> Content

    init(@ViewBuilder inputView: @escaping () -> Content) {
        self.inputView = inputView
    }
    
    var body: some View {
        VStack
        {
            inputView()
        }
        .padding().background(Color.purple)
    }
}

用法是:

CustomVStackView() {
    Text("Hello").font(Font.largeTitle)
    Text("World")
}