This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 55).
文本
一个 SwiftUI 文本组件,用于显示样式化文本,并支持嵌套文本。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
Expo UI Text 与官方 SwiftUI Text API 保持一致。
安装
- npx expo install @expo/uiIf you are installing this in an existing React Native app, make sure to install expo in your project.
用法
基本文本
import { Host, Text } from '@expo/ui/swift-ui'; export default function BasicTextExample() { return ( <Host matchContents> <Text>你好,世界</Text> </Host> ); }
带修饰符的文本
使用修饰符来样式化整段文本。
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 组件以对单个片段应用不同样式。这对于行内格式化非常有用,例如句子中的加粗或彩色词语。
注意: 嵌套文本使用 SwiftUI 的 Text 拼接,因此只有返回
Text的修饰符(例如bold、italic、font、foregroundColor以及带颜色的foregroundStyle)才会应用于嵌套片段。
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> ); }
混合行内样式
组合多个带样式的片段以实现富文本格式化。
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 修饰符来应用不同的字体字重。
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 修饰符来应用不同的字体设计。
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 库加载自定义字体。
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 修饰符在一定行数后截断文本。
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 格式。
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> ); }
自动更新的日期
使用 date 和 dateStyle 属性来显示会随着时间流逝自动更新的日期。这在小组件和实时活动中尤其有用。
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+。
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> ); }
注意:
timerInterval、countsDown和pauseTime需要 iOS 16.0+ / tvOS 16.0+。在旧版本上,计时器间隔将不会渲染。
API
import { Text } from '@expo/ui/swift-ui';
Component
Type: React.Element<TextProps>
boolean • Default: trueWhether the timer counts down (true) or up (false).
DateA date to display using the specified dateStyle. The text auto-updates as time passes.
TextDateStyle • Default: 'date'The style used to format the date prop.
booleanEnables Markdown formatting for the text content using SwiftUI LocalizedStringKey.
ClosedRangeDateA time interval to display as a live-updating timer.