Style — strikethrough

strikethrough 是 SwiftUI 中用于为文本添加删除线的修饰符。它通常用于表示文本已被删除、过时或不再有效。例如,在待办事项列表中,已完成的任务可以用删除线标记。


strikethrough 的基本用法 #

1. 添加删除线 #

import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("This is a strikethrough text")
            .strikethrough() // 添加删除线
    }
}

运行结果:
文本 “This is a strikethrough text” 会显示一条删除线。


2. 自定义删除线的颜色 #

你可以通过 strikethrough(_:color:) 方法自定义删除线的颜色:

Text("This is a strikethrough text")
    .strikethrough(true, color: .red) // 添加红色删除线
  • true: 表示启用删除线。
  • color: .red: 设置删除线的颜色为红色。

3. 动态控制删除线 #

你可以结合 @State 动态控制是否显示删除线。例如:

struct ContentView: View {
    @State private var isStrikethrough: Bool = false

    var body: some View {
        VStack {
            Text("Toggle strikethrough")
                .strikethrough(isStrikethrough) // 根据状态动态显示删除线

            Button("Toggle") {
                isStrikethrough.toggle() // 切换删除线状态
            }
        }
    }
}

运行结果:
点击按钮可以切换删除线的显示状态。


strikethrough 的常见使用场景 #

1. 待办事项列表 #

在待办事项列表中,已完成的任务可以用删除线标记:

struct TodoItem: View {
    let task: String
    let isCompleted: Bool

    var body: some View {
        Text(task)
            .strikethrough(isCompleted) // 根据完成状态显示删除线
            .foregroundColor(isCompleted ? .gray : .black) // 完成的任务变为灰色
    }
}

struct ContentView: View {
    var body: some View {
        VStack {
            TodoItem(task: "Buy groceries", isCompleted: true)
            TodoItem(task: "Finish homework", isCompleted: false)
        }
    }
}

运行结果:

  • “Buy groceries” 会显示删除线并变为灰色。
  • “Finish homework” 会正常显示。

2. 价格折扣 #

在电商应用中,原价可以用删除线表示,折扣价则正常显示:

struct PriceView: View {
    var body: some View {
        HStack {
            Text("$100")
                .strikethrough(true, color: .gray) // 原价显示删除线
            Text("$80")
                .foregroundColor(.red) // 折扣价显示为红色
        }
    }
}

运行结果:

  • 原价 “$100” 会显示删除线。
  • 折扣价 “$80” 会显示为红色。

3. 文本编辑 #

在文本编辑器中,删除线可以用于标记需要删除的内容:

struct TextEditorView: View {
    @State private var text: String = "This is some text to edit."

    var body: some View {
        VStack {
            TextEditor(text: $text)
                .frame(height: 100)

            Text(text)
                .strikethrough(text.contains("edit")) // 如果文本包含 "edit",显示删除线
        }
    }
}

运行结果:
如果文本包含 “edit”,则会显示删除线。


strikethrough 的参数说明 #

参数描述
isActive: Bool是否启用删除线。默认为 true
color: Color?删除线的颜色。如果为 nil,则使用文本的默认颜色。

总结 #

什么时候使用 strikethrough#

  • 表示删除或过时:例如待办事项列表中已完成的任务、商品的原价等。
  • 文本标记:在文本编辑或注释中,标记需要删除的内容。
  • 视觉区分:通过删除线将某些文本与其他文本区分开来。

如何使用 strikethrough#

  • 使用 .strikethrough() 为文本添加删除线。
  • 使用 .strikethrough(true, color: .red) 自定义删除线的颜色。
  • 结合 @State 动态控制删除线的显示状态。

strikethrough 是一个简单但非常有用的修饰符,能够帮助你更好地表达文本的状态和含义。

本文共 916 字,上次修改于 Jan 27, 2025