我正在SwiftUI中创建一个Widget,我发现我认为这是一个非常愚蠢的问题。
我有一个Image,我想用它作为背景。我已经将它的纵横比设置为.fill,但它似乎没有这样做。
下面是代码:
var body: some View {
        ZStack {
            Image(affirmation.customImageName ?? "c_0")
                .edgesIgnoringSafeArea(.all)
                .aspectRatio(contentMode: .fill)
                .frame(width: 300, height: 300, alignment: .center)
                .background(Color.green)
            
            HStack {
                VStack {
                    Text(affirmation.title)
                        .font(.title)
                        .multilineTextAlignment(.leading)
                }
                Spacer()
            }
            .padding(.leading, 5)
            .padding(.top, 5)
            
        }
    }以及它的外观:

另外,如果我删除.frame(width: 300, height: 300, alignment: .center),图像将不会使用整个区域。
更新
现在,由于@staticVoidMan的回答,图像的大小发生了变化,并添加了resizable()。现在的问题是,Text似乎也调整了尺寸并填充了更多的空间。
var body: some View {
        ZStack {
           Image(affirmation.customImageName ?? "c_0")
           .resizable()
           .aspectRatio(contentMode: .fill)
            
            HStack {
                Text(affirmation.title)
                    .font(.body)
                    .multilineTextAlignment(.leading)
                    .lineLimit(nil)
                Spacer()
            }
            .padding(.leading, 5)
            .padding(.top, 5)
            
        }下面是图片:

提前感谢
发布于 2020-07-29 05:07:25
.resizable是一个Image视图修饰符,允许它占用所需的最大空间。默认情况下,
ZStack可以无限伸展以适应其所有内部视图,因此您需要通过.frame修饰符定义框架,以便所有内部视图都保持在定义的范围内。即
ZStack {
    //...
}
.frame(width: 300, height: 300)解决方案:
ZStack(alignment: .leading) {
    Image("yourImageName")
        .resizable()
        .aspectRatio(contentMode: .fill)
        .background(Color.green)
    
    Text("Lorem ipsum dolor set amet")
        .font(.title)
        .padding(.leading, 5)
}
.frame(width: 300, height: 300)ZStack(alignment: .leading)将对HStack:Text|Spacer的需求减少到只有Text.multilineTextAlignment(.leading)是默认的,所以required.lineLimit(nil)不是默认的,所以不需要发布于 2021-03-24 06:50:27
V/Hstack({}).frame(maxWidth: .infinity, maxHeight: .infinity).background(
            Image("yourImageName")
                .resizable()
                .scaledToFill()
        )的图像
https://stackoverflow.com/questions/63136329
复制相似问题