如何在 SwiftUI 中以形状显示文本?

Posted

技术标签:

【中文标题】如何在 SwiftUI 中以形状显示文本?【英文标题】:How to have text in shapes in SwiftUI? 【发布时间】:2020-03-28 05:17:15 【问题描述】:

我想在 SwiftUI 中以形状(例如 Square)的形式添加文本(例如 Hi),并使它们充当单个对象。

在 SwiftUI 中似乎没有直接的方法可以在形状中添加文本。

【问题讨论】:

我从以下解决方案开始,但最终使用了 SO answer 中的视图扩展,因为它在您想要圆角的角落提供了更多的灵活性。 【参考方案1】:

这是,IMO,最简单的方法:

通用架构

Text(_any_of_text_)
    .background(_any_of_Shape)

例如:

Text("Hello, World!")
    .background(Rectangle().stroke())

Text("Hello, World!")
    .background(RoundedRectangle(cornerRadius: 4).stroke())

【讨论】:

要添加到此答案,您还可以为 Text 分配一个 .frame() 属性以指定 Text/Rectangle 的确切大小【参考方案2】:

这是我认为更全面的答案。这将从 Xcode 11.5 开始工作:

Text(question)
    .fixedSize(horizontal: false, vertical: true)
    .multilineTextAlignment(.center)
    .padding()
    .frame(width: 300, height: 200)
    .background(Rectangle().fill(Color.white).shadow(radius: 3))

注意事项:

fixedSize() 会让文本换行(因为 .lineLimit(nil) 不再起作用)。如果你只是想要一行带有省略号的文本,你可以省略它 multilineTextAlignment() 允许您以任何方式居中或对齐文本 padding() 在 Rectangle() 中为文本提供更多的呼吸空间 frame() 设置 Text() 的宽度和高度,因此设置 Rectangle(),因为它是 Text() 的背景 background() 设置 Text() 背景的形状。我也在这里添加了填充颜色和阴影

此示例的最终结果是文本看起来像提示卡一样的形状!

【讨论】:

【参考方案3】:

使用 Swift 内置的形状,例如Capsule()RoundedRectangle() 等。然后,您可以将.overlay 应用于形状。叠加层采用任何视图,例如text

示例:

var body: some View 
    Capsule()
        .fill(Color.blue)
        .overlay(
            Text("Hello World")
        )

结果:

【讨论】:

【参考方案4】:
Text("Hi")
 .frame(width: 40, height: 40, alignment: .center)
 .background(Color.black)
 .clipShape(Rectangle())

【讨论】:

如果您解释了您提供的代码如何回答问题,这将是一个更好的答案。【参考方案5】:

创建一个新的 SwiftUI 视图并使用 Z-Stack 来创建您的目标。

struct YourCustomObject: View 

    var body: some View 
        ZStack 
            Rectangle()
                .fill(Color.secondary)
                .frame(width: 200, height: 200)

            Text("Your desired text")
                .foregroundColor(.white)
        
    

【讨论】:

这不一定按预期工作。例如,如果文本非常长,它可能会超出矩形框架的宽度或高度。

以上是关于如何在 SwiftUI 中以形状显示文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift ui 中调整形状以适应文本视图的长度和宽度

如何在 SwiftUI 中以编程方式滚动列表?

SwiftUI,列表行添加按钮

如何在 SwiftUI 中以编程方式计算 MKMapCamera centerCoordinateDistance

如何在 SwiftUI 中使用渐变填充形状

如何在 SwiftUI 中用另一个形状剪辑一个形状?