【发布时间】:2021-07-04 01:39:45
【问题描述】:
编辑:替换您选择的“系统名称:”。 “pencil.circle”工作正常。 “编辑”不是有效的 SF 符号。
(我已经简化了我的代码,以便您可以剪切和粘贴。这就是为什么您会看到 .frame、可调整大小等。更简单的代码可能是您的第一直觉。)
我创建了一个视图,它是行项目的垂直列表(表格视图)。 每个行项目都有一个水平视图,其中包含两个图像。 图片占用太多空间,无法正确显示在屏幕上:
import SwiftUI
@main
struct StackOverflowDemoApp: App {
var body: some Scene {
WindowGroup {
TandemView()
}
}
}
struct PaddedImageView: View {
let color: Color = .red
var body: some View {
ZStack {
color
Image(systemName: "edit")
.resizable()
.padding()
}
Spacer()
}
}
struct TandemView: View {
var body: some View {
HStack {
Spacer()
Image(systemName: "pencil")
.resizable()
.background(Color.orange)
.frame(height: 80)
.aspectRatio(1, contentMode: .fill)
PaddedImageView()
.frame(width: 200, height: 80)
}
.padding()
.fixedSize()
}
}
struct TandemView_Previews: PreviewProvider {
static var previews: some View {
TandemView()
}
}
以上是我能达到的最接近所需布局的内容(它只需要水平放置)。我用 GeometryReader 进行了试验,但没有产生预期的结果。
以下是我尝试过的一些事情:
- 提供的代码
- NoConstraintsOnPencilOrHStack
- NoConstraintsOnTandemView
- NoConstraintsOnImageInPaddedViewButWithFrameConstraint
我正在尝试获取一个包含两个适合屏幕宽度的图像(我的实际源由 UIImage 对象组成)的行视图。
编辑: 在接受 cedricbahirwe 的即时响应后,我能够进一步简化代码。新结果:
我在顶层添加了
TandemView()
.padding(.horizontal)
我删除了:
// Spacer()
在 PaddedImageView 的末尾
更新了 TandemView -- 更改了两个框架并删除了 3 行:
struct TandemView: View {
var body: some View {
HStack {
Spacer()
Image(systemName: "pencil")
.resizable()
.background(Color.orange)
.frame(width: 80, height: 80)
// .aspectRatio(1, contentMode: .fill)
PaddedImageView()
.frame(height: 80)
}
// .padding()
// .fixedSize()
}
}
【问题讨论】:
-
所以你想让两张图片的宽度相等?
-
没有。最终,第一个视图是一个正方形,它与第二个视图的高度相同。两者之间可能有间隔。第二个视图通常为 320 x 80,但不需要固定长度。它可以扩大屏幕的宽度,允许第一张图像的宽度/高度。正常高度为 80
标签: swiftui