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()
相关推荐
传奇开心果编程18 小时前
【SwiftUI入门练中学】第7课 动画与手势:让界面更灵动
学习·macos·ui·ios·swiftui·swift
知潮网20 小时前
发售刚十天,9999 元的 iPhone 18 Pro 解锁就重启
ios·iphone
2501_916007471 天前
苹果应用商店App Store上架费用标准及原因解析
android·ios·小程序·https·uni-app·iphone·webview
传奇开心果编程1 天前
【SwiftUI娓娓道来】第3课:让界面活起来——交互与动画指南
学习·macos·ui·ios·swiftui·swift
可乐鸡翅yeah_2 天前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
00后程序员张2 天前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
黑科技iOS上架2 天前
Unity3D游戏过审App Store4.3机审实战
ios·审核·ios混淆·执行程序差异化
用户38034165882972 天前
控制中心一键后台录音:我被自己的 Spike 骗了两次
ios·swift
Crazy_MT2 天前
App 可能不再是入口:从 iOS 27 快捷指令看苹果的 AI Agent 野心
人工智能·ios·apple
Maple9962 天前
Firebase iOS SDK 重大事故:一个 nil key 如何让全球 App 集体崩溃
ios