# Drawer - 抽屉

## 说明

从底部滑出的抽屉容器，含顶部拖拽手柄、标题栏（左右图标）和内容区，支持手势拖拽切换档位或下滑关闭。提供两种高度模式：

- `elastic`（弹性高度）：高度随内容自适应，只有显示 / 隐藏两种状态。
- `fixed`（固定高度）：有顶部、70%、隐藏三档，通过 `heightLevel` 指定初始档位。

内置分屏 / 自由窗适配、iOS 键盘抬升（`KeyboardAvoidingView`）、安全区与返回键锁定。关闭动画结束后才回调 `onClose`。

## 属性

| 属性 | 说明 | 类型 | 默认值 | 必填 |
|------|------|------|--------|------|
| **visible** | 是否显示 | `boolean` | - | 是 |
| **onClose** | 关闭回调（下滑、点遮罩、返回键、点左侧图标默认行为触发） | `() => void` | - | 否 |
| **title** | 标题 | `string` | `''` | 否 |
| **leftIconType** | 左侧图标类型 | `'back' \| 'cancel' \| 'confirm'` | `'cancel'` | 否 |
| **rightIconType** | 右侧图标类型，不传则不显示 | `'more' \| 'confirm'` | - | 否 |
| **onLeftPress** | 左侧图标点击回调。不传时默认执行关闭 | `() => void` | - | 否 |
| **onRightPress** | 右侧图标点击回调 | `() => void` | - | 否 |
| **rightIconRef** | 右侧图标外层 View 的 ref，供 PopMenus / Menus 通过 `showFrom(ref.current)` 锚定 | `Ref<View>` | - | 否 |
| **children** | 内容区 | `ReactNode` | - | 否 |
| **type** | 高度模式。`elastic` 弹性高度；`fixed` 固定档位 | `'elastic' \| 'fixed'` | `'elastic'` | 否 |
| **colorDepth** | 底色深度。`base` 白色背景、`low` 浅灰背景 | `'base' \| 'low'` | `'low'` | 否 |
| **heightLevel** | 固定高度档位（仅 `type='fixed'` 生效）。`high` 撑满到顶部、`medium` 固定 70% | `'high' \| 'medium'` | `'medium'` | 否 |

## 使用示例

```tsx
import { Drawer } from 'miot/ui/hyperOSUI';
import { View, Text } from 'react-native';

// 弹性高度抽屉
<Drawer
  visible={visible}
  title="设置"
  leftIconType="cancel"
  onClose={() => setVisible(false)}
>
  <View style={{ padding: 24 }}>
    <Text>抽屉内容</Text>
  </View>
</Drawer>

// 固定高度抽屉，初始撑满到顶部
<Drawer
  visible={visible}
  type="fixed"
  heightLevel="high"
  colorDepth="base"
  title="详情"
  rightIconType="more"
  onRightPress={onMore}
  onClose={() => setVisible(false)}
>
  {content}
</Drawer>
```

## 注意事项

- `onClose` 在退场动画完成后才触发；组件内部无自管 `visible` 状态，`visible` 由外部控制。
- `rightIconRef` 仅在 `rightIconType` 有值时有意义，用于把 `Menus` / `PopMenus` 锚定到标题栏右侧图标。
- `type='elastic'` 时内容高度自适应测量，超过可用高度会被约束到最大高度后内部滚动。

## 修改记录

| 日期 | 版本 | 修改内容 | 修改原因 | 关联 |
|------|------|----------|----------|------|
| 2026-09-17 | v1.19.0 | iOS 下禁止插件蒙层侧滑关闭 | — | 37e375ec |
| 2026-08-03 | v1.18.18 | 修复若干已知问题 | — | e13e39cb |
| 2026-07-27 | v1.18.18 | 修复若干已知问题 | — | b9cc8f02 |
| 2026-07-21 | v1.18.18 | 修复抽屉相关问题 | — | c52dfd3d |
| 2026-07-07 | v1.18.14 | 修复首屏加载时抽屉高度异常 | — | dc6a033e |
| 2026-06-29 | v1.18.12 | 修复若干已知问题 | — | 4ad76322 |
| 2026-06-26 | v1.18.12 | 兼容键盘弹出位置适配 | — | c2ffc879 |
| 2026-06-26 | v1.18.12 | 适配分屏显示 | — | 9c54b326 |
| 2026-06-26 | v1.18.12 | 修复抽屉相关问题 | — | 270c5d88 |
