首页 > 解决方案 > 如何防止 Text 扩展 VStack 的宽度

问题描述

我有一个VStack包含一个Image和一个Text。我将图像的宽度(和高度)设置为屏幕宽度的一半:

struct PopularNow: View {
    let item = popular[0]
    
    var body: some View {
        VStack(spacing: 5) {
            Image(item.image)
                .resizable()
                .aspectRatio(contentMode: .fit)
                .frame(width: getRect().width/2, height: getRect().width/2)
            Text(item.description)
                .font(.caption)
                .fontWeight(.bold)
                .lineLimit(0)
        }
        .padding()
        .background(Color.gray.opacity(0.1))
        .cornerRadius(15)
    }
    
    func getRect() -> CGRect {
        return UIScreen.main.bounds
    }
}

问题是Text推动并导致VStack扩展而不是尊重Image' 的宽度。我怎么能告诉Text水平增长不要超过Image宽度并“垂直”增长(即添加它需要的行数)?我知道我可以将frame修饰符添加到VStack自身,但这似乎是一个 hack。我想告诉它只占用已经有的Text空间宽度,而不是更多。VStack

这就是它现在的样子,你可以看到 VStack 不是屏幕大小的一半,而是全屏大小,因为它Text正在扩展它。

在此处输入图像描述

标签: swiftui

解决方案


尝试修复它的大小,比如

    VStack(spacing: 5) {
        Image(item.image)
            .resizable()
            .aspectRatio(contentMode: .fit)
            .frame(width: getRect().width/2, height: getRect().width/2)
        Text(item.description)
            .font(.caption)
            .fontWeight(.bold)
            .lineLimit(0)
    }
    .fixedSize()         // << here !!
//   .fixedSize(horizontal: true, vertical: false)   // alternate
    .padding()

推荐阅读