OneScript
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?

最后更新于

本页目录