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

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

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

【问题讨论】:

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

标签: swiftui swift5


【解决方案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)
              }
          }
      }
      

      【讨论】:

      • 这不一定按预期工作。例如,如果文本非常长,它可能会超出矩形框架的宽度或高度。
      猜你喜欢
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2021-05-06
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多