передача представления в пользовательское представление контейнера Swiftui - PullRequest
0 голосов
/ 03 августа 2020
• 1000

Код:

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)
    }
}

, который дает:

введите описание изображения здесь

Я хочу, чтобы внутренние представления правильно масштабировались в соответствии с выделенным им пространством (и изменяли их размер при перетаскивании разделителя) - но проблема демонстрируется цветами фона - зеленый явно не что желательно. Как передать представление так, чтобы получить желаемый результат (ie все, что я передаю, изменяется, чтобы заполнить контейнер)

1 Ответ

0 голосов
/ 03 августа 2020

Ожидаемого эффекта можно достичь с помощью

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

По умолчанию представления SwiftUI сокращаются до внутреннего c содержимого.

...