# Apple 风格 UI 组件使用指南
本指南提供了 Apple 风格 UI 设计系统中所有组件的详细使用说明和最佳实践。
## 目录
1. [设计令牌](#设计令牌)
2. [基础组件](#基础组件)
3. [导航组件](#导航组件)
4. [数据展示组件](#数据展示组件)
5. [反馈组件](#反馈组件)
6. [媒体组件](#媒体组件)
7. [布局组件](#布局组件)
8. [动画组件](#动画组件)
9. [可访问性工具](#可访问性工具)
10. [性能优化](#性能优化)
## 设计令牌
### 字体系统
```typescript
import { LargeTitle, Title1, Body, Caption1 } from '@/components/ui/Typography'
function MyComponent() {
return (
大标题 (34pt)
标题 1 (28pt)
正文内容 (17pt)
说明文字 (12pt)
)
}
```
**最佳实践:**
- 使用语义化的字体组件而不是直接的 CSS 类
- 遵循苹果的字体层级,不要跳级使用
- 中英文混排时使用 `fontType="chinese"` 属性
### 颜色系统
```typescript
// 使用 Tailwind 类名
蓝色背景
// 使用设计令牌
import { appleColorTokens } from '@/lib/design-tokens'
const blueColor = appleColorTokens.system.blue.light
```
**最佳实践:**
- 优先使用语义化颜色(如 `apple-bg-primary`)
- 深色模式会自动切换颜色
- 使用系统颜色保持一致性
## 基础组件
### Button 按钮
```typescript
import Button from '@/components/ui/Button'
function ButtonExample() {
return (
{/* 四种变体 */}
{/* 三种尺寸 */}
{/* 状态 */}
)
}
```
**最佳实践:**
- 主要操作使用 `filled` 变体
- 次要操作使用 `tinted` 或 `gray` 变体
- 确保按钮最小尺寸为 44px(苹果触摸目标标准)
- 使用 `loading` 状态而不是禁用按钮
### Input 输入框
```typescript
import Input from '@/components/ui/Input'
function InputExample() {
return (
{/* 基础输入框 */}
{/* 状态变体 */}
{/* 带图标 */}
console.log('清除')}
/>
)
}
```
**最佳实践:**
- 始终提供 `label` 属性以支持可访问性
- 使用 `helperText` 提供额外说明
- 错误状态使用 `errorText` 而不是 `helperText`
- 合理使用图标增强用户体验
### Card 卡片
```typescript
import Card, { CardHeader, CardTitle, CardContent, CardFooter } from '@/components/ui/Card'
function CardExample() {
return (
{/* 简单卡片 */}
卡片标题
卡片内容
{/* 组合卡片 */}
高级卡片
使用组合组件构建的卡片
{/* 交互式卡片 */}
console.log('卡片点击')}
className="cursor-pointer"
>
可点击卡片
支持 hover 和 active 动画
)
}
```
**最佳实践:**
- 使用 `variant="elevated"` 创建层次感
- 交互式卡片添加 `interactive` 属性
- 保持卡片内容简洁,避免过度嵌套
## 导航组件
### NavigationBar 导航栏
```typescript
import NavigationBar, { BackButton, MenuButton } from '@/components/ui/NavigationBar'
function NavigationExample() {
return (
{/* 大标题模式 */}
history.back()} />}
rightContent={ console.log('菜单')} />}
/>
{/* 标准模式 */}
}
rightContent={
}
/>
)
}
```
### TabBar 标签栏
```typescript
import TabBar, { useTabBar } from '@/components/ui/TabBar'
function TabBarExample() {
const tabBar = useTabBar('home')
const tabs = [
{ id: 'home', label: '首页', icon: '🏠' },
{ id: 'search', label: '搜索', icon: '🔍' },
{ id: 'favorites', label: '收藏', icon: '❤️', badge: 3 },
{ id: 'profile', label: '我的', icon: '👤' },
]
return (
)
}
```
**最佳实践:**
- 标签栏最多显示 5 个标签
- 使用 `useTabBar` Hook 管理状态
- 为重要标签添加徽章提示
## 数据展示组件
### Badge 徽章
```typescript
import Badge, { Tag, NumberBadge, StatusDot } from '@/components/ui/Badge'
function BadgeExample() {
return (
{/* 基础徽章 */}
Default
Success
Error
Warning
Info
{/* 数字徽章 */}
{/* 标签 */}
console.log('关闭')}>
可关闭标签
带图标标签
{/* 状态点 */}
)
}
```
### ProgressBar 进度条
```typescript
import ProgressBar, { StepProgress } from '@/components/ui/ProgressBar'
function ProgressExample() {
const [progress, setProgress] = useState(45)
return (
{/* 线性进度条 */}
{/* 环形进度条 */}
{/* 步骤进度 */}
)
}
```
## 反馈组件
### Modal 模态框
```typescript
import Modal, { ConfirmModal } from '@/components/ui/Modal'
function ModalExample() {
const [showModal, setShowModal] = useState(false)
const [showConfirm, setShowConfirm] = useState(false)
return (
setShowModal(false)}
title="模态框标题"
description="模态框描述"
size="medium"
>
模态框内容
setShowConfirm(false)}
title="确认删除"
description="此操作无法撤销"
onConfirm={() => console.log('确认删除')}
/>
)
}
```
### Toast 提示
```typescript
import { useToast, ToastContainer } from '@/components/ui/Toast'
function ToastExample() {
const toast = useToast()
return (
)
}
```
## 动画组件
### AnimatedEntry 进入动画
```typescript
import AnimatedEntry, { SlideInUp, StaggeredAnimation } from '@/components/ui/AnimatedEntry'
function AnimationExample() {
return (
{/* 基础进入动画 */}
从下方滑入的卡片
{/* 预配置动画 */}
延迟 200ms 的滑入动画
{/* 交错动画 */}
{[1, 2, 3, 4].map(i => (
卡片 {i}
))}
)
}
```
**最佳实践:**
- 使用 `trigger="visible"` 实现滚动触发动画
- 交错动画的延迟时间建议 50-150ms
- 响应用户的减少动画偏好设置
## 可访问性工具
### 用户偏好设置
```typescript
import { PreferencesProvider, AccessibilityPanel, useUserPreferences } from '@/lib/preferences'
function App() {
return (
)
}
function MyContent() {
const { preferences } = useUserPreferences()
return (
当前字体大小: {preferences.fontSize}%
减少动画: {preferences.prefersReducedMotion ? '是' : '否'}
)
}
```
### 包容性设计
```typescript
import { createInclusiveStatusIndicator } from '@/lib/accessibility'
function StatusExample() {
const successIndicator = createInclusiveStatusIndicator('success', {
showIcon: true,
showShape: true,
size: 'medium'
})
return (
{successIndicator.icon}
)
}
```
## 性能优化
### 虚拟滚动
```typescript
import VirtualList from '@/components/ui/VirtualList'
function VirtualListExample() {
const items = Array.from({ length: 10000 }, (_, i) => ({
id: i,
name: `项目 ${i + 1}`,
description: `描述 ${i + 1}`
}))
return (
(
{item.name}
{item.description}
)}
/>
)
}
```
### 性能监控
```typescript
import { usePerformanceMonitor, useMemoryMonitor } from '@/lib/performance'
function PerformanceExample() {
usePerformanceMonitor('MyComponent')
const memoryInfo = useMemoryMonitor()
return (
{memoryInfo && (
内存使用: {Math.round(memoryInfo.usedJSHeapSize / 1024 / 1024)}MB
)}
)
}
```
## 迁移指南
### 从传统 CSS 迁移
```typescript
// 旧方式
内容
// 新方式
内容
```
### 从其他 UI 库迁移
```typescript
// Material-UI Button
// Apple UI Button
```
## 常见问题
### Q: 如何自定义主题颜色?
A: 修改 `tailwind.config.ts` 中的颜色令牌,或在 CSS 中覆盖 CSS 变量。
### Q: 动画不生效怎么办?
A: 检查用户是否启用了减少动画偏好,或者组件是否设置了 `disabled` 属性。
### Q: 如何确保可访问性?
A: 使用语义化 HTML,提供 ARIA 属性,确保键盘导航,测试对比度。
### Q: 性能优化建议?
A: 使用 React.memo,避免不必要的重渲染,大列表使用虚拟滚动。
## 总结
Apple 风格 UI 设计系统提供了完整的组件库和工具集,遵循苹果 Human Interface Guidelines 2025 标准。通过合理使用这些组件和工具,可以构建出美观、易用、高性能的用户界面。
记住始终考虑可访问性、性能和用户体验,让每个用户都能享受到优质的交互体验。