swift 覆盖一个子对象的HStack对齐

0sgqnhkj  于 2023-02-21  发布在  Swift
关注(0)|答案(1)|浏览(166)

是否有办法在单个元素中动态覆盖HStack的对齐属性?

请考虑此方案

1.存在具有alignment = bottom的父项HStack

  1. HStack中有3个大小不同的元素
    1.我希望第3个元素与HStack的顶部对齐。此对齐方式与Hstack的底部对齐方式不同
var body: some View {
    HStack(alignment: .bottom) {
        Rectangle()
            .fill(.yellow)
            .frame(height: 100)

        Rectangle()
            .fill(.blue)
            .frame(height: 20)

        // I want this to go to the top of the HStack
        Rectangle()
            .fill(.green)
            .frame(height: 50)
    }
    .background {
        Color.red
    }
}

我试图让HStack考虑最高高度100,只改变最后一个元素的对齐方式。
我尝试过将第3个元素 Package 到另一个堆栈中,但只有当我指定maxHeight等于父元素的子元素中最高的高度100时,这才有效。这意味着这些矩形必须知道它们的兄弟元素。

HStack {
    Rectangle()
        .fill(.green)
        .frame(height: 50)
}
.frame(maxHeight: 100, alignment: .top)
enxuqcxy

enxuqcxy1#

你可以试试这个:

var body: some View {
    HStack(alignment: .bottom) {
        Rectangle()
            .fill(.yellow)
            .frame(height: 100)
        
        Rectangle()
            .fill(.blue)
            .frame(height: 20)
        
        VStack {
            Rectangle()
                .fill(.green)
                .frame(height: 50)
            Spacer()
        }
    }
    .background {
        Color.red
    }
}

如果出于某种原因,您希望限制Spacer可以占用的空间大小的范围,则可以按以下示例添加修饰符:

VStack {
   Rectangle()
     .fill(.green)
     .frame(height: 50)
   Spacer()
     .frame(minHeight: 10, maxHeight: 50)
}

相关问题