首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用SwiftUI中的内容填充图像

用SwiftUI中的内容填充图像
EN

Stack Overflow用户
提问于 2020-07-28 14:21:58
回答 2查看 1.4K关注 0票数 2

我正在SwiftUI中创建一个Widget,我发现我认为这是一个非常愚蠢的问题。

我有一个Image,我想用它作为背景。我已经将它的纵横比设置为.fill,但它似乎没有这样做。

下面是代码:

代码语言:javascript
运行
复制
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似乎也调整了尺寸并填充了更多的空间。

代码语言:javascript
运行
复制
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)
            
        }

下面是图片:

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-29 05:07:25

  1. .resizable是一个Image视图修饰符,允许它占用所需的最大空间。

默认情况下,

  1. ZStack可以无限伸展以适应其所有内部视图,因此您需要通过.frame修饰符定义框架,以便所有内部视图都保持在定义的范围内。

代码语言:javascript
运行
复制
ZStack {
    //...
}
.frame(width: 300, height: 300)

解决方案:

代码语言:javascript
运行
复制
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)不是默认的,所以不需要
票数 2
EN

Stack Overflow用户

发布于 2021-03-24 06:50:27

  1. code

代码语言:javascript
运行
复制
V/Hstack({}).frame(maxWidth: .infinity, maxHeight: .infinity).background(
            Image("yourImageName")
                .resizable()
                .scaledToFill()
        )

  1. 检查您的图像分辨率,我遇到了图像分辨率问题。分辨率值为72x72的图像不能满足Widget背景。使用144x144分辨率

的图像

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63136329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档