首页 > 解决方案 > 将视图传递给自定义 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)
    }
}

产生:

在此处输入图像描述

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

标签: swiftswiftui

解决方案


可以达到你预期的效果

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

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


推荐阅读