如何在 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 中调整形状以适应文本视图的长度和宽度