【问题标题】:SwiftUI: How to set custom view size dynamicallySwiftUI:如何动态设置自定义视图大小
【发布时间】:2020-04-25 07:03:21
【问题描述】:

我使用 SwiftUI。我需要一个自定义视图。自定义视图宽度应等于父视图宽度。自定义视图包含两个图像视图,分别左对齐和右对齐。每个图像视图具有相同的宽度和高度(纵横比 = 1)。两个图像视图有 10 个点的空间。我将在图像视图中显示不同尺寸的图像(比例填充)。

如果我使用GeometryReader,我可以动态设置图像视图框架,但是如何动态设置GeometryReader 框架?如果我使用HStack 而不使用GeometryReader,则图像视图帧是可变的。如何在 SwiftUI 中做到这一点?

【问题讨论】:

  • 您可以在HStack 的背景中使用rectReader,类似于this 帖子中显示的方法。
  • @Asperi 它工作。但是创建视图并更新它,似乎并不好。

标签: ios swift swiftui


【解决方案1】:

也许是以下的一些变体:

struct CustomView: View {
    var body: some View {
        HStack(spacing: 10) {
            Image(systemName: "heart.fill")
                .resizable()
                .aspectRatio(1, contentMode: .fit)

            Image(systemName: "heart.fill")
                .resizable()
                .aspectRatio(1, contentMode: .fit)
        }.frame(maxWidth: .infinity)
    }
}

两个图像都保持 1:1 的纵横比,它们之间有 10 个点的间距,但可以使用 .frame 修饰符水平扩展。

根据需要将Image(systemName: "heart.fill") 替换为所需的图像源。

如果您的源图像资源没有 1:1 的纵横比,请将 contentMode 设置为 .fill,并使用 @987654328 限制 HStackCustomView 在其父级内的帧高度@。

【讨论】:

  • 我尝试显示 480x270 大小的图像。图像视图宽度等于高度。但是,图像会在不保持纵横比的情况下进行缩放。
  • 我明白了,我认为在您最初的问题中,您的意思是您的图像文件具有 1:1 的纵横比。在这种情况下,将contentMode 更改为.fill 并限制HStackCustomView 在其父级中的框架高度。
  • 代码.aspectRatio(1, contentMode: .fill),只保持视图纵横比,仍然缩放图像而不保持图像纵横比。而且我不知道superview的宽度,如何计算HStack的高度
  • 我不确定我是否遵循 - 您希望视图保持 1:1 的正方形纵横比吗?如果您的图像不是正方形比例,您唯一的缩放选项是.fit.fill.fit 缩放您的图像,保持其纵横比,使其全部适合视图。 .fill 将缩放图像,使视图的整个区域都被图像覆盖。
  • 我有一个 480x270 大小的图像,纵横比是 480 / 270。我想在方形视图中显示它(视图宽度 = 视图高度)并保持图像比例 480 / 270(剪辑扩展部分)。 .aspectRatio(1, contentMode: .fit).aspectRatio(1, contentMode: .fill) 都在不保持 480 / 270 比例的情况下缩放图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多