带有 SF 符号的 HStack 图像未居中对齐

Dan*_*iel 7 swift swiftui sf-symbols

我有这个简单的 SwiftUI 代码。我希望所有符号都居中对齐,就像云符号一样。

struct ContentView : View {
var body: some View {
    HStack(alignment: .center, spacing: 10.0) {
        Image(systemName: "cloud.sun")
        Image(systemName: "cloud")
        Image(systemName: "cloud.bolt")
        Text("Text")
        }.font(.title)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是正如您在下面看到的,第一个和最后一个符号没有居中。我错过了什么,还是这是一个错误?

居中 HStack

干杯!

Mat*_*ini 8

这就是正在发生的事情。

在此处输入图片说明

Image意见没有调整。

看起来他们不知道他们的内在内容大小,或者它可能报告了错误的值。

修复它

struct ContentView : View {
    var body: some View {
        HStack(alignment: .center, spacing: 10.0) {
            Image(systemName: "cloud.sun")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .background(Color.red)
            Image(systemName: "cloud")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .background(Color.yellow)
            Image(systemName: "cloud.bolt")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .background(Color.pink)
            Text("Text").background(Color.green)
        }
        .frame(width: 250, height: 50)
        .background(Color.gray)
        .font(.title)

    }
}
Run Code Online (Sandbox Code Playgroud)

...Images调整大小,并确保纵横比设置为.fit,否则它们会拉伸。

在 上也设置框架,HStack否则它会扩展以填满整个屏幕。

@MartinR 提出了一个更好的解决方案 - 通过创建图像UIImage- 请参阅下面的评论。

struct ContentView : View {

    var body: some View {
        HStack {
            Image(uiImage: UIImage(systemName: "cloud.sun")!)
                .background(Color.red)
            Image(uiImage: UIImage(systemName: "cloud")!)
                .background(Color.yellow)
            Image(uiImage: UIImage(systemName: "cloud.bolt")!)
                .background(Color.pink)
            Text("Text").background(Color.green)
        }
        .background(Color.gray)
        .font(.title)

    }

}
Run Code Online (Sandbox Code Playgroud)

输出

在此处输入图片说明

  • 如果你通过 UIImage,例如 `Image(uiImage: UIImage(systemName: "cloud")!)` 那么对齐似乎有效,但图标的缩放比例不同。 (3认同)
  • 我认为 SF 符号具有“自然基线偏移”,可以与文本正确对齐。因此,我希望像“HStack(alignment: .lastTextBaseline)”这样的东西能够工作——但事实并非如此。 (2认同)
  • 谢谢。我用新的反馈助手提交了一个错误。杰。:) (2认同)