可滚动视图

ScrollView 组件用于在可滚动区域中显示其内容。当用户执行滚动手势时,可视区域会随之更新。你可以通过 axes 属性控制滚动方向,支持垂直、水平或双向滚动。

类型定义

1type ScrollViewProps = {
2  axes?: AxisSet
3  children?: VirtualNode | VirtualNode[] | (VirtualNode | undefined | null)[]
4}

基本说明

  • 滚动方向由 axes 属性控制。
  • 内容通过 children 指定,通常使用如 <VStack><HStack> 等布局容器。
  • 不支持缩放操作。

默认行为

  • 默认滚动方向为 垂直
  • 滚动指示器根据平台默认行为自动显示,除非通过 modifier 显式设置。

示例

1<ScrollView>
2  <VStack>
3    {new Array(100).fill('').map((_, index) => (
4      <Text>Row {index}</Text>
5    ))}
6  </VStack>
7</ScrollView>

ScrollView 修饰符说明

你可以使用以下视图修饰符配置滚动行为:


scrollIndicator

控制滚动指示器的显示方式。

类型定义

1scrollIndicator?: ScrollScrollIndicatorVisibility | {
2  visibility: ScrollScrollIndicatorVisibility
3  axes: AxisSet
4}

ScrollScrollIndicatorVisibility 可选值:

  • "automatic":遵循系统默认行为。
  • "visible":显示指示器,可能会自动隐藏。
  • "hidden":隐藏指示器,除非被系统强制显示。
  • "never":从不显示指示器。

示例

1<ScrollView scrollIndicator="never">
2  <VStack>{/* 内容 */}</VStack>
3</ScrollView>

设置特定方向的指示器:

1<ScrollView
2  scrollIndicator={{
3    visibility: "hidden",
4    axes: "vertical"
5  }}
6>
7  <VStack>{/* 内容 */}</VStack>
8</ScrollView>

scrollDisabled

完全禁用滚动行为。

类型定义

1scrollDisabled?: boolean

示例

1<ScrollView scrollDisabled>
2  <Text>该滚动视图已被锁定。</Text>
3</ScrollView>

scrollClipDisabled

控制是否允许内容超出滚动视图边界显示。

类型定义

1scrollClipDisabled?: boolean

示例

1<ScrollView scrollClipDisabled>
2  {/* 内容可能会超出滚动区域边界 */}
3</ScrollView>

scrollDismissesKeyboard

指定滚动行为对软件键盘的影响。

类型定义

1scrollDismissesKeyboard?: ScrollDismissesKeyboardMode

可选值

  • "automatic":根据上下文决定默认行为。
  • "immediately":滚动开始时立即关闭键盘。
  • "interactively":允许用户拖动关闭键盘。
  • "never":滚动不会影响键盘。

示例

1<ScrollView scrollDismissesKeyboard="interactively">
2  {/* 含有输入框的内容 */}
3</ScrollView>

defaultScrollAnchor

设置初始显示的内容锚点,或内容变化时保持该锚点对齐。

类型定义

1defaultScrollAnchor?: KeywordPoint | Point

KeywordPoint 关键词

"top""bottom""leading""trailing""center""topLeading""bottomTrailing" 等。

示例

1<ScrollView defaultScrollAnchor="bottom">
2  <VStack>
3    {/* 新增内容会保持底部对齐 */}
4  </VStack>
5</ScrollView>

AxisSet

定义滚动方向。

类型定义

1type AxisSet = 'vertical' | 'horizontal' | 'all'

示例

1<ScrollView axes="horizontal">
2  <HStack>{/* 横向滚动内容 */}</HStack>
3</ScrollView>

scrollTargetLayout

用于标记滚动区域中的主要布局容器,便于对齐与滚动控制。

类型定义

1scrollTargetLayout?: boolean

示例

1<ScrollView axes="horizontal">
2  <LazyHStack scrollTargetLayout>
3    {items.map(item => <Text>{item.title}</Text>)}
4  </LazyHStack>
5</ScrollView>

scrollTargetBehavior

定义滚动时如何对齐内容。

类型定义

1scrollTargetBehavior?: ScrollTargetBehavior
1type ScrollTargetBehavior =
2  | "paging"
3  | "viewAligned"
4  | "viewAlignedLimitAutomatic"
5  | "viewAlignedLimitAlways"
6  | "viewAlignedLimitNever"
7  | "viewAlignedLimitAlwaysByFew"
8  | "viewAlignedLimitAlwaysByOne"

模式说明

  • "paging":分页滚动,以容器尺寸为单位。
  • "viewAligned":滚动时按视图边界对齐。
  • "viewAlignedLimitAutomatic":在紧凑横向环境下限制滚动数量,其他情况放开。
  • "viewAlignedLimitAlways":始终限制每次滚动的项目数量。
  • "viewAlignedLimitNever":不限制滚动范围。
  • "viewAlignedLimitAlwaysByFew" (仅 iOS 18.0+):每次滚动少量视图。
  • "viewAlignedLimitAlwaysByOne" (仅 iOS 18.0+):每次滚动一个视图。

描述

用于配置内容滚动对齐策略,适用于横向滚动的列表、分页等场景。


scrollContentBackground

指定滚动区域的默认背景是否显示。

类型定义

1scrollContentBackground?: Visibility

可选值

  • "automatic":根据上下文自动决定是否显示背景。
  • "hidden":隐藏默认背景,可实现透明或自定义背景。
  • "visible":强制显示默认背景,即使已有自定义背景。

示例

1<List scrollContentBackground="hidden">
2  <Text>这里没有默认背景</Text>
3</List>

总结

修饰符 / 属性 说明
axes 设置滚动方向(verticalhorizontalall
scrollIndicator 控制滚动指示器的显示及滚动方向
scrollDisabled 设置为 true 时禁用滚动行为
scrollClipDisabled 允许内容超出滚动区域边界可见
scrollDismissesKeyboard 滚动时控制是否关闭软件键盘
defaultScrollAnchor 设置初始锚点或内容变化时的锚点
scrollTargetLayout 标记布局容器为滚动对齐的目标区域
scrollTargetBehavior 设置内容滚动对齐方式(分页、视图对齐等)
scrollContentBackground 控制是否显示默认背景(透明、自定义背景场景常用)