UI
概览
用 sheet、alert 等修饰符弹出临时内容。
呈现修饰符是 onescript/views 中 Modifier 的方法,可在 App 与 Action 视图中使用,Widget 不支持。
| Modifier | 用途 |
|---|---|
sheet | 从底部弹出一张卡片,可下滑关闭。 |
fullScreenCover | 覆盖整个屏幕,需要自行提供关闭按钮。 |
popover | 在视图旁边显示气泡。 |
alert | 显示提示框,可带输入框。 |
confirmationDialog | 显示一组操作供用户选择。 |
presentationDetents | 设置 sheet 可停靠的高度。 |
presentationDragIndicator | 控制 sheet 顶部指示条是否显示。 |
presentationContentInteraction | 设置滑动时优先调整高度还是滚动内容。 |
presentationBackgroundInteraction | 设置 sheet 下方的页面能否操作。 |
interactiveDismissDisabled | 禁止下滑关闭。 |
受控状态
呈现状态由脚本掌管:isPresented 决定是否显示,onDismiss 为必填。
- 用户在原生侧关闭时(下滑 sheet、点击 alert 按钮、点击 popover 外部),OneScript 调用
onDismiss,你需要在其中把isPresented设为false。 - 脚本自己把
isPresented设为false时会直接关闭,不会调用onDismiss。 - 如果
onDismiss没有把状态改为false,弹出内容会重新出现。需要阻止用户关闭时,请使用interactiveDismissDisabled。
import { app } from "onescript"
import { Button, Modifier, Text, useState } from "onescript/views"
function Screen() {
const [shown, setShown] = useState(false)
return (
<Button
action={() => setShown(true)}
modifier={Modifier.sheet({
isPresented: shown,
onDismiss: () => setShown(false),
content: <Text>你好</Text>,
})}
>
显示
</Button>
)
}
await app.show(<Screen />)行为
- 链中位于呈现修饰符之前的修饰符作用于被修饰的视图,之后的作用于整体结果,与 SwiftUI 的修饰符顺序一致。
- 请让呈现修饰符始终挂在视图上,只切换
isPresented。在渲染之间增删呈现修饰符会重建被修饰的视图,丢失其中的组件状态。 sheet、fullScreenCover、popover的内容是新的呈现层级:可以放自己的NavigationStack,外层页面中的NavigationLink不会作用于它,内容里的 NavigationLink 也不会把页面压入外层的导航栈。- 呈现修饰符也可以用在根视图的
NavigationStack或TabView上。
How is this guide?
最后更新于