将视图传递到自定义swiftui容器视图

时间:2020-08-03 02:35:38

标签: swift swiftui

我正在swiftui中创建一个自定义容器视图-我希望它缩放您放入其中的视图-但它似乎没有按我期望的那样工作,只是想知道我在做错什么。

代码:

struct SplitView<Left:View, Right:View>: View
{
    
    @State var left : () -> Left
    @State var right : () -> Right
    @State var splitterWidth = 10
    @State var splitterLocation = 120
    
    var body: some View
    {
        GeometryReader()
        {
            geometry in
            HStack( spacing:0)
            {
                left().frame( width:CGFloat(splitterLocation), height: geometry.size.height)
                Text(" ").frame( width : CGFloat( splitterWidth), height : CGFloat( geometry.size.height))
                    .background(Color.yellow)
                right().frame(width: geometry.size.width - CGFloat( self.splitterWidth + self.splitterLocation), height: geometry.size.height)
                    .background(Color.red)
            }
        }
    }
}

struct SplitView_Previews: PreviewProvider
{
    static var previews: some View
    {
        SplitView( left: {Text("green").background(Color.green)},
                   right: {Text("red")})
                  .frame(width:300, height:300)
    }
}

产生:

enter image description here

我希望它正确地将内部视图缩放到分配给它们的空间(并在拖动拆分器时调整它们的大小)-但问题是由背景色所显示的-绿色显然不是所希望的。如何传递视图,以便获得所需的结果(即,我传递的内容都会调整大小以填充容器)

1 个答案:

答案 0 :(得分:0)

您期望的效果可以通过

实现
    SplitView( 
        left: {
           Text("green")
              .frame(maxWidth: .infinity, maxHeight: .infinity)
              .background(Color.green)
        },
        right: {Text("red")}
    ).frame(width:300, height:300)

默认情况下,SwiftUI视图打算缩小为固有内容。