0

我有一个 ZStack,其中显示了一个图像。在某些情况下需要缩放图像。

我无法对齐 ZStack 底部的缩放图像,它总是出现在中间。

我尝试将 ZStack(alignment: .bottom) 与图像的 .alignmentGuide(.bottom) 结合使用,但这不会改变结果。

同样在图像周围放置一个 VStack 并在其上方放置一个 Spacer() 不会改变结果。

HStack 不相关,仅显示,因为我在此构造中需要一个 ZStack。但主要问题在于 VStack,它在 ZStack 的空间中缩放后不会移动。

看起来 .scaleEffect 只是使用原始图像的位置和框架,并将缩放的图像放在中间。这是 scaleEffect 的限制吗?还有什么功能可以使用?

这是我的视图(简化代码)://我将背景着色为紫色,以显示 ZStack 的完整大小

var body: some View {
    ZStack(alignment: .bottom) {
        Color.purple
        Image(battlingIndividual.getMonster().getStatusImageName(battlingIndividual.status))
            .resizable()
            .scaledToFill()
            .scaleEffect(battlingIndividual.getMonster().size.scaleValue)
        HStack() {
            SkillViews(battlingIndividual: battlingIndividual)
            Spacer()
        }
      }
}

结果是这样的:

目前的结果

但它应该看起来像这样: 期望的结果

编辑:我为图像添加了背景,以显示图像在 ZStack 中居中。 图像背景为灰色


解决方案: 在这种情况下我们不需要对齐,我们需要一个锚:

.scaleEffect(battlingIndividual.getMonster().size.scaleValue, anchor: .bottom)

解决方案图片: 在此处输入图像描述

4

3 回答 3

1

我想到了。.scaleEffect 使用自己的锚点,可以设置为 .bottom。

scaleEffect(_:anchor:) Apple Developer

因此,我只需要在 scaleEffect 中添加“ancor: .bottom”。

.scaleEffect(battlingIndividual.getMonster().size.scaleValue, anchor:
.bottom)

对于以下结果: 在此处输入图像描述

于 2021-01-24T00:48:48.253 回答
0

请将您的图像放在图像上方的 VStack 和 Spacer() 中,您的图像将位于堆栈的底部。对齐 .bottom 仅用于将多个视图彼此对齐,但您的堆栈中没有多个视图。HStack 不计入对齐。

如果我在我的示例中尝试这个并缩小图像,

import SwiftUI

struct ContentView: View {
    var body: some View {
        ZStack {
            Color.purple
            
            VStack {
                Spacer()
                
                Image(systemName: "ladybug")
                    .resizable()
                    .scaledToFit()
                    .frame(width: 100, height: 100, alignment:                 
                HStack {
                    Image(systemName: "hare")
                        .resizable()
                        .frame(width: 50, height: 50)
                    Image(systemName: "hare")
                        .resizable()
                        .frame(width: 50, height: 50)
                    Image(systemName: "hare")
                        .resizable()
                        .frame(width: 50, height: 50)
                    Spacer()
                }
            }
        }
    }
}

我明白了。

在此处输入图像描述

亲切的问候, MacUserT

于 2021-01-23T14:36:05.197 回答
0

我假设这个视图容器ZStack是一个单元格视图,所以你需要对齐的不是紧贴内容的 ZStack,而是整个HStack包含那些怪物单元格,比如

HStack(alignment: .bottom) {    // << here !!
   ForEach ... {
      MonsterCellView()
   }
}
于 2021-01-23T15:09:47.213 回答