SwiftUI-Text组件学习

SwiftUI 中的 Text 组件是一个非常常用的视图组件,用于显示文本内容。它提供了丰富的功能,可以通过多种方式进行定制化,支持样式、修饰符、布局等。下面是一些关于 Text 组件的详细学习内容,涵盖基础、样式和修饰符等方面。

1.基本用法

Text 组件的最基本用法是直接显示一个字符串。

示例

swift 复制代码
import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, SwiftUI!")
            .padding()
    }
}
2. 常用修饰符

你可以使用一系列的修饰符来定制Text组件的样式。

字体样式

  • font: 设置文本的字体和大小。
scss 复制代码
Text("Hello, World!")
    .font(.title)  // 设置为标题字体
  • fontWeight: 设置字体的粗细。
scss 复制代码
Text("Bold Text")
    .fontWeight(.bold)  // 设置为加粗

字体颜色

  • foregroundStyle设置文本的颜色

使用单一颜色

scss 复制代码
Text("Hello, world!")
    .foregroundStyle(.blue)

使用渐变色

less 复制代码
Text("Gradient Text")
    .foregroundStyle(LinearGradient(gradient: Gradient(colors: [.blue, .green]), startPoint: .top, endPoint: .bottom))

使用图像填充

less 复制代码
Text("Image Fills Text")
    .foregroundStyle(ImagePaint(image: Image(systemName: "star.fill"), scale: 0.1))

使用多种前景样式组合:

less 复制代码
Text("Multi-Style Text")
    .foregroundStyle(LinearGradient(gradient: Gradient(colors: [.blue, .purple]), startPoint: .top, endPoint: .bottom))

文本对齐

  • multilineTextAlignment: 设置文本的多行对齐方式。
scss 复制代码
Text("This is a long text that will wrap into multiple lines.")
    .multilineTextAlignment(.center)  // 文本居中对齐

行高

  • lineSpacing: 设置行之间的间距。
scss 复制代码
Text("This is line 1.\nThis is line 2.")
    .lineSpacing(10)  // 设置行间距为 10

文本修饰

  • bold(), italic(), underline(), strikethrough(): 常用文本修饰器。
php 复制代码
Text("Bold and Underlined")
    .bold()          // 加粗
    .underline(true, pattern: .solid, color: Color.red)
  • strikethrough(): 添加删除线。
php 复制代码
Text("This text is striked through.")
    .strikethrough(true, color: .red)  // 添加红色删除线

多行文本

  • lineLimit: 设置文本的最大行数。
scss 复制代码
Text("This is a very long text that might be truncated.")
    .lineLimit(1)  // 限制为一行,超出部分会被截断

行和字符间距

  • kerning: 设置字符间距。
scss 复制代码
Text("Spacing between characters")
    .kerning(2)  // 设置字符间距为 2
3. 富文本 (AttributedString)

Text 组件可以与 AttributedString 配合使用,支持富文本样式。

python 复制代码
import SwiftUI

struct ContentView: View {
    var body: some View {
        Text(attributedText)
            .padding()
    }

    var attributedText: AttributedString {
        var str = AttributedString("This is an example of AttributedString.")
        
        // 设置 "example" 为粗体和红色
        if let range = str.range(of: "example") {
            str[range].font = .boldSystemFont(ofSize: 20)
            str[range].foregroundColor = .red
        }

        return str
    }
}
  • AttributedString 让你可以更灵活地对文本中的不同部分进行样式设置。
  • 你可以为文本中的特定部分(如某些单词或字符)应用不同的字体、颜色等样式。
4. 文本显示多行与缩放
  • fixedSize(): 防止 Text 被截断或压缩。
php 复制代码
Text("A very long text that will not be compressed or truncated.")
    .fixedSize(horizontal: false, vertical: true)
  • truncationMode: 设置文本的截断模式。
scss 复制代码
Text("A very long text that will be truncated.")
    .lineLimit(1)  // 设置为一行
    .truncationMode(.tail)  // 超出部分显示省略号
5. 组合 Text 和其他视图

你可以将多个 Text 组件组合在一起,形成复杂的文本布局。 使用 + 组合多个文本:

scss 复制代码
Text("Hello, ") + Text("SwiftUI!").font(.title)

嵌套 Text 组件:

scss 复制代码
Text("This is ")
    .foregroundColor(.red) +
Text("combined with ")
    .bold() +
Text("text")
6. 使用 Text 进行响应式设计

Text 组件可以与 GeometryReader 配合使用,制作响应式设计。

scss 复制代码
GeometryReader { geometry in
    Text("Responsive Text")
        .frame(width: geometry.size.width * 0.8, height: 50)
        .background(Color.blue)
        .foregroundColor(.white)
        .cornerRadius(10)
}
7.添加点击事件

Text 可以结合 onTapGesture 修饰符来响应用户的点击事件。

scss 复制代码
Text("Tap Me")
    .onTapGesture {
        print("Text tapped!")
    }
8. 调整文本的行高

你可以使用 .lineSpacing() 或 .padding() 来控制文本之间的行高或内边距。

scss 复制代码
Text("Line 1\nLine 2")
    .lineSpacing(5)  // 行距
    .padding()
相关推荐
2501_916008892 小时前
Windows 上写第一个 SwiftUI App,KXBuild 空工程起步,跑到 iPhone 真机
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
2501_915918413 小时前
iOS 上架注意事项有哪些?Appuploader 的四个阶段自查清单
android·ios·小程序·https·uni-app·iphone·webview
黑化旺仔1 天前
【OC】Runtime:类元数据、加载初始化与消息派发
开发语言·macos·ios·objective-c
songgeb1 天前
iOS App支持设置RTL语言的实践
ios·swift·ui kit
软泡芙1 天前
【iOS】swift启动屏显示黑屏
ios
用户69371750013841 天前
当你向领导申请 AI 编程工具预算时,如果领导追问“能提效多少,有量化数据吗”,你该怎么回答?
android·后端·ios
Layer1 天前
一些脱离 Mac 依赖的 Agent 操作 iPhone 实现
ios·ai编程·测试
用户69371750013841 天前
当我说 Claude 搭配 GLM-5.3-Flash 太好用了,同事却提醒我:你可能正在失去对代码的掌控
android·后端·ios
茶底世界之下1 天前
一键裁方会丢掉什么?用 Awaking 给园林照片做两种画幅
ios
Marco_Marco1351 天前
定位SDK接入实战:Android/iOS/鸿蒙三端怎么选、怎么接
android·ios·harmonyos