ios 在SwiftUI中将图像的宽度设置为其HStack容器视图宽度的一半?

mlnl4t2r  于 2022-12-24  发布在  iOS
关注(0)|答案(1)|浏览(266)

所以我只想做一些非常简单的事情,就是让一个图像占用其容器大小的一半,另一半是Vstack。
我目前这样做是为了迫使两个视图都使用maxWidth来占用尽可能多的空间:.无穷大,因此它们最终占用等量的空间:

struct ContentView: View {
    var body: some View {
        HStack {
            Image("landscape")
                .resizable()
                .scaledToFill()
                .frame(maxWidth: .infinity, maxHeight: 170)
            VStack {
                Text("Test")
                Text("Test 2")
            }
            .frame(maxWidth: .infinity)
        }
        .frame(maxWidth: .infinity, maxHeight: 170)
        .background(Color.red)
        .padding()
    }
}

但可悲的是,结果却很糟糕:

有什么提示吗?我看到GeometryReader在这里可能会派上用场,但似乎会把我的观点一直推到顶部,最终得到不想要的结果。

oaxa6hgo

oaxa6hgo1#

你需要给HStack加上一个fixedSize()修饰符,并保持它垂直于true。

var body: some View {
    HStack {
        Image("1")
            .resizable()
            .scaledToFill()
            .frame(maxWidth: .infinity, maxHeight: 170)
        
        VStack {
            Text("Test")
            Text("Test 2")
        }
        .frame(maxWidth: .infinity)
    }
    .frame(maxWidth: .infinity, maxHeight: 170)
    .background(Color.red)
    .padding()
    .fixedSize(horizontal: false, vertical: true)
}

您可以在这里阅读更多关于fixedsize()的信息
现在,您的HStack将如下所示

相关问题