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

如何在SwiftUI中以形状显示文本?,swiftui,swift5,Swiftui,Swift5,我想在SwiftUI中添加形状(如正方形)中的文本(如Hi),并使它们充当单个对象 在SwiftUI中似乎没有直接的方式在形状中添加文本。创建一个新的SwiftUI视图,并使用Z堆栈创建目标 struct YourCustomObject: View { var body: some View { ZStack { Rectangle() .fill(Color.secondary)

我想在SwiftUI中添加形状(如正方形)中的文本(如Hi),并使它们充当单个对象


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

创建一个新的SwiftUI视图,并使用Z堆栈创建目标

struct YourCustomObject: View {

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

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

以下是国际海事组织最简单的方法:

通用模式

Text(_any_of_text_)
    .background(_any_of_Shape)
例如:


这是我认为更全面的答案。这将从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()为文本在矩形()中提供了更多的呼吸空间
  • frame()设置文本()的宽度和高度,因此设置矩形(),因为它是文本()的背景
  • background()设置文本()背景的形状。我在这里添加了填充颜色和阴影

本例的最终结果是文本看起来像是出现在一个提示卡形状中

使用Swift内置形状,如
胶囊()
圆形伸缩角度()
等。然后,您可以对形状应用
.overlay
。覆盖图可以在任何视图中显示,例如
文本

例子: 结果:

如果您解释了您提供的代码是如何回答问题的,这将是一个更好的答案。这不一定会按预期工作。比如说,如果文本非常长,它可能会溢出矩形框的宽度或高度。要添加此答案,还可以为文本指定.frame()属性,以指定文本/矩形的确切大小
Text("Hi")
 .frame(width: 40, height: 40, alignment: .center)
 .background(Color.black)
 .clipShape(Rectangle())
Text(question)
    .fixedSize(horizontal: false, vertical: true)
    .multilineTextAlignment(.center)
    .padding()
    .frame(width: 300, height: 200)
    .background(Rectangle().fill(Color.white).shadow(radius: 3))
var body: some View {
    Capsule()
        .fill(Color.blue)
        .overlay(
            Text("Hello World")
        )
}