SwiftUI文本截断位置修饰符truncationMode
SwiftUI文本截断位置修饰符truncationMode

SwiftUI文本截断位置修饰符truncationMode

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),可以实现灵活的文本布局。

注意截断模式仅在空间不足的情况下生效,未超出可用空间时不会显示省略号。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注