Reference version

This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

文本

一个用于显示带样式文本的 SwiftUI Text 组件,支持嵌套文本。

iOS
tvOS
Included in Expo Go
Recommended version:
~57.0.0

Expo UI Text 与官方 SwiftUI Text API 保持一致。

以不同字体大小、字重和层级化次级样式渲染的文本

安装

Terminal
npx expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

用法

基本文本

BasicTextExample.tsx
import { Host, Text } from '@expo/ui/swift-ui'; export default function BasicTextExample() { return ( <Host matchContents> <Text>你好,世界</Text> </Host> ); }

带修饰符的文本

使用修饰符来设置整段文本的样式。

StyledTextExample.tsx
import { Host, Text } from '@expo/ui/swift-ui'; import { font, foregroundStyle } from '@expo/ui/swift-ui/modifiers'; export default function StyledTextExample() { return ( <Host matchContents> <Text modifiers={[font({ size: 24, weight: 'bold' }), foregroundStyle('blue')]}> 大号粗体蓝色文本 </Text> </Host> ); }

嵌套文本(按片段样式)

嵌套 Text 组件以不同方式设置各个片段的样式。这对于行内格式化很有用,例如在句子中对某些单词加粗或着色。

NestedTextExample.tsx
import { Host, Text } from '@expo/ui/swift-ui'; import { bold, italic, foregroundStyle } from '@expo/ui/swift-ui/modifiers'; export default function NestedTextExample() { return ( <Host matchContents> <Text> 你好 <Text modifiers={[bold(), foregroundStyle('red')]}>世界</Text></Text> </Host> ); }

混合行内样式

组合多个带样式的片段以实现富文本格式。

MixedStylesExample.tsx
import { Host, Text } from '@expo/ui/swift-ui'; import { bold, italic, foregroundStyle, font } from '@expo/ui/swift-ui/modifiers'; export default function MixedStylesExample() { return ( <Host matchContents> <Text> 这是 <Text modifiers={[bold()]}>粗体</Text><Text modifiers={[italic()]}>斜体</Text>, 以及 <Text modifiers={[foregroundStyle('orange')]}>彩色</Text> 文本。 </Text> </Host> ); }

字重

使用 font 修饰符应用不同的字重。

FontWeightsExample.tsx
import { Host, Text, VStack } from '@expo/ui/swift-ui'; import { font } from '@expo/ui/swift-ui/modifiers'; export default function FontWeightsExample() { return ( <Host matchContents> <VStack spacing={4}> <Text modifiers={[font({ weight: 'ultraLight' })]}>超细</Text> <Text modifiers={[font({ weight: 'light' })]}>细体</Text> <Text modifiers={[font({ weight: 'regular' })]}>常规</Text> <Text modifiers={[font({ weight: 'medium' })]}>中等</Text> <Text modifiers={[font({ weight: 'semibold' })]}>半粗体</Text> <Text modifiers={[font({ weight: 'bold' })]}>粗体</Text> <Text modifiers={[font({ weight: 'heavy' })]}>特粗</Text> <Text modifiers={[font({ weight: 'black' })]}>黑体</Text> </VStack> </Host> ); }

字体设计

使用 font 修饰符应用不同的字体设计。

FontDesignsExample.tsx
import { Host, Text, VStack } from '@expo/ui/swift-ui'; import { font } from '@expo/ui/swift-ui/modifiers'; export default function FontDesignsExample() { return ( <Host matchContents> <VStack spacing={4}> <Text modifiers={[font({ design: 'default', size: 18 })]}>默认设计</Text> <Text modifiers={[font({ design: 'rounded', size: 18 })]}>圆角设计</Text> <Text modifiers={[font({ design: 'serif', size: 18 })]}>衬线设计</Text> <Text modifiers={[font({ design: 'monospaced', size: 18 })]}>等宽设计</Text> </VStack> </Host> ); }

自定义字体

使用带有 family 参数的 font 修饰符来使用自定义字体。你可以使用 expo-font 库加载自定义字体。

CustomFontExample.tsx
import { Host, Text, VStack } from '@expo/ui/swift-ui'; import { font } from '@expo/ui/swift-ui/modifiers'; export default function CustomFontExample() { return ( <Host matchContents> <VStack spacing={4}> <Text modifiers={[font({ family: 'Inter-Bold', size: 18 })]}>Inter 粗体</Text> <Text modifiers={[font({ family: 'Inter-Regular', size: 18 })]}>Inter 常规</Text> </VStack> </Host> ); }

带行数限制的文本

使用 lineLimit 修饰符在达到一定行数后截断文本。

LineLimitExample.tsx
import { Host, Text } from '@expo/ui/swift-ui'; import { lineLimit } from '@expo/ui/swift-ui/modifiers'; export default function LineLimitExample() { const longText = '这是一段非常长的文本,它将在两行后被截断。 '.repeat(5); return ( <Host matchContents> <Text modifiers={[lineLimit(2)]}>{longText}</Text> </Host> ); }

Markdown

使用 markdownEnabled 属性为文本内容启用 Markdown 格式。

MarkdownTextExample.tsx
import { Host, Text, VStack } from '@expo/ui/swift-ui'; export default function MarkdownTextExample() { return ( <Host matchContents> <VStack spacing={4}> <Text markdownEnabled>普通文本。</Text> <Text markdownEnabled> 这是 **粗体文本**、*斜体文本*,以及 ***同时加粗和斜体的文本***。 </Text> <Text markdownEnabled>~~删除线文本~~</Text> <Text markdownEnabled>`这是等宽文本`</Text> <Text markdownEnabled> 访问 [Expo 文档](https://docs.expo.dev/versions/latest/sdk/ui/) 以了解更多关于 Expo UI 的信息 </Text> </VStack> </Host> ); }

自动更新日期

使用 datedateStyle 属性来显示一个会随着时间推移自动更新的日期。这在小组件和实时活动中尤其有用。

DateTextExample.tsx
import { Host, Text } from '@expo/ui/swift-ui'; export default function DateTextExample() { return ( <Host matchContents> <Text date={new Date(Date.now() + 300000)} dateStyle="timer" /> </Host> ); }

计时器间隔

使用 timerInterval 来显示实时倒计时或正向计时器。这需要 iOS/tvOS 16+。

TimerIntervalExample.tsx
import { Host, Text } from '@expo/ui/swift-ui'; export default function TimerIntervalExample() { return ( <Host matchContents> <Text timerInterval={{ lower: new Date(), upper: new Date(Date.now() + 600000) }} countsDown /> </Host> ); }

API

import { Text } from '@expo/ui/swift-ui';

Component

Text

Type: React.Element<TextProps>

TextProps

children

Optional • Type: ReactNode

Text content or nested Text components.

countsDown

Only for:
iOS 16.0+
tvOS 16.0+

Optional • Type: boolean • Default: true

Whether the timer counts down (true) or up (false).

date

Optional • Type: Date

A date to display using the specified dateStyle. The text auto-updates as time passes.

dateStyle

Optional • Type: TextDateStyle • Default: 'date'

The style used to format the date prop.

markdownEnabled

Optional • Type: boolean

Enables Markdown formatting for the text content using SwiftUI LocalizedStringKey.

pauseTime

Only for:
iOS 16.0+
tvOS 16.0+

Optional • Type: Date

A date at which the timer should appear paused.

timerInterval

Only for:
iOS 16.0+
tvOS 16.0+

Optional • Type: ClosedRangeDate

A time interval to display as a live-updating timer.

Types

TextDateStyle

Literal type: string

The style used to format a date in a SwiftUI Text view.

Acceptable values are: 'timer' | 'relative' | 'offset' | 'date' | 'time'