【问题标题】:Aligning texts and images in SwiftUI在 SwiftUI 中对齐文本和图像
【发布时间】:2019-07-30 21:49:33
【问题描述】:

下面的代码来自一个简单的 SwiftUI ContentView。它显示了一段文本和一个我希望沿其中心线垂直对齐的图像。

var body: some View {
    HStack(alignment: .center) {
        Text("Cloudy")
            .background(Color.yellow)
        Image(systemName: "cloud.heavyrain")
            .background(Color.blue)
    }
    .font(.largeTitle)
    .border(Color.red)
}

相反,我发现它们似乎以它们的框架为中心。对于文本,框架太大,而对于图像,框架太小。

是否可以对齐内容(尤其是图像 - 似乎没有界限)而不是框架?

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    图像可以有基线,虽然很多时候它们等于零,但也有一些其他情况(如“多云”),实际上它们不是。如果您将基线设置为零,那么它将以文本为中心:

    struct ContentView: View {
    
        var body: some View {
            HStack(alignment: .center) {
                Text("Cloudy").background(Color.yellow)
                Image(uiImage: UIImage(systemName: "cloud.heavyrain")!.withBaselineOffset(fromBottom: 0))
                    .background(Color.blue)
            }
            .font(.largeTitle)
            .border(Color.red)
        }
    }
    

    【讨论】:

    • 顺便说一句,我还建议您观看 WWDC2019 session Introducing SF Symbols
    • 感谢您对 WWDC 会议的参考。这特别有启发性。我曾认为 SF Symbols “只是一种字体”,但没有意识到它是 SwiftUI 带来的变化中如此重要的一部分。我选择天气符号来尝试我的第一次对齐可能是不幸的,因为它们似乎有许多不同的基线偏移量。您的解决方案是一个很大的改进,但会改变渲染图像的大小。我可以看到我在这周剩下的时间里都在学习这个系统的来龙去脉。
    • @kontiki this 仅适用于单行文本,如果文本是多行的,则图像不会完全位于新行中的文本旁边。相反,它是水平交叉的,右边有一个填充,然后是新行的图像
    猜你喜欢
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多