truncationMode 是 SwiftUI 中一个用于指定文本截断位置的修饰符。当文本内容超过视图的可用空间时,截断模式决定文本的哪一部分会被省略号 (…) 替换。
语法
Text("Your long text here")
.truncationMode(.tail) // 默认在尾部截断
截断模式选项
truncationMode 有三个值:
1、.tail(默认):在文本的末尾截断。
2、.head:在文本的开头截断。
3、.middle:在文本的中间截断。
示例
1、默认截断模式(.tail)
Text("This is a very long line of text that will be truncated.")
.lineLimit(1) // 限制为单行
.truncationMode(.tail)
.frame(width: 150) // 限制宽度
效果:
This is a very long...
2、开头截断(.head)
Text("This is a very long line of text that will be truncated.")
.lineLimit(1)
.truncationMode(.head)
.frame(width: 150)
效果:
...will be truncated.
3、中间截断(.middle)
Text("This is a very long line of text that will be truncated.")
.lineLimit(1)
.truncationMode(.middle)
.frame(width: 150)
效果:
This is a...runcated.
结合其他修饰符
1、与 lineLimit 一起使用
truncationMode 仅在 lineLimit 限制行数的情况下生效。例如:
Text("SwiftUI is amazing, but this text is too long to fit.")
.lineLimit(1)
.truncationMode(.middle)
.frame(width: 200)
lineLimit(1) 限制为单行。
文本超过 frame 宽度时,使用 .middle 截断。
效果:
SwiftUI is a...oo long to fit.
2、与 minimumScaleFactor 配合
如果希望在空间不足时先缩小文本,而不是立即截断,可以使用 minimumScaleFactor:
Text("SwiftUI is amazing, but this text is too long to fit.")
.lineLimit(1)
.minimumScaleFactor(0.5)
.truncationMode(.tail)
.frame(width: 150)
效果:
当文本超出 frame 宽度时,首先尝试将字体缩小到 50%。
如果缩小后仍超出宽度,则按 .tail 截断。
注意事项
1、lineLimit 是触发截断的前提条件:
如果未设置 lineLimit,truncationMode 不会生效。
2、适用范围:
主要用于 Text 视图,其他视图需要手动调整布局。
3、多行文本:
在多行文本中,truncationMode 作用于被截断的最后一行。
完整示例
struct ContentView: View {
var body: some View {
VStack {
Text("This is a very long line of text that will be truncated.")
.lineLimit(1)
.truncationMode(.tail)
.frame(width: 150)
.background(Color.green)
Text("This is another very long line of text.")
.lineLimit(1)
.truncationMode(.head)
.frame(width: 150)
.background(Color.blue)
Text("This is a third example of a long line.")
.lineLimit(1)
.truncationMode(.middle)
.frame(width: 150)
.background(Color.red)
}
}
}
效果:
第一段文本会在末尾截断。
第二段文本会在开头截断。
第三段文本会在中间截断。
总结
truncationMode 用于指定文本截断的方式,支持开头、尾部和中间三种截断模式。
结合 lineLimit 和其他布局修饰符(如 frame),可以实现灵活的文本布局。
注意截断模式仅在空间不足的情况下生效,未超出可用空间时不会显示省略号。