7 滚动视图
4 分钟阅读
原文链接: https://developer.apple.com/documentation/swiftui/scroll-views
7 滚动视图
让大家能够滚动查看当前显示区域放不下的内容。
概述
当视图的内容在显示区域里放不下时,你可以把这个视图包在一个 ScrollView 中,让大家可以在一个或多个轴向上滚动。用视图修饰符来配置这个滚动视图,例如,你可以设置滚动指示器的可见性,或者某个维度上是否允许滚动。

你可以在滚动视图中放任何类型的视图,但最常把滚动视图用于元素太多、显示区域放不下的布局容器。对于放进滚动视图的某些容器视图(例如惰性栈),容器在视图可见或几乎可见之前不会加载它们。对于另外一些容器(例如普通栈和网格),无论滚动状态如何,容器都会一次性加载全部内容。
列表 和 表格 隐式包含一个滚动视图,因此无需为这两类容器添加滚动功能。不过,你可以用与显式滚动视图相同的视图修饰符来配置它们的隐式滚动视图。
关于设计指导,请参阅 Human Interface Guidelines 中的 滚动视图。
创建滚动视图
- ScrollView — 一种可滚动的视图。
- ScrollViewReader — 一种提供编程式滚动的视图,它与一个代理协作,滚动到已知的子视图。
- ScrollViewProxy — 一个代理值,支持以编程方式滚动视图层级中的可滚动视图。
管理滚动位置
- scrollPosition(_:anchor:) — 把一个滚动位置的绑定关联到该视图内的某个滚动视图。
- scrollPosition(id:anchor:) — 关联一个绑定,当该视图内的滚动视图滚动时更新它。
- defaultScrollAnchor(_:) — 关联一个锚点,用于控制默认应渲染滚动视图内容的哪个部分。
- defaultScrollAnchor(_:for:) — 关联一个锚点,用于在特定情形下控制滚动视图的位置。
- ScrollAnchorRole — 定义滚动锚点角色的类型。
- ScrollPosition — 一种类型,用于定义滚动视图在其内容中滚动到了哪个语义位置。
定义滚动目标
- scrollTargetBehavior(_:) — 设置视图在指定轴上可滚动时的滚动行为。
- scrollTargetLayout(isEnabled:) — 把最外层的布局配置为滚动目标布局。
- ScrollTarget — 一种类型,定义滚动视图应尝试滚动到的目标。
- ScrollTargetBehavior — 一种类型,定义可滚动视图的滚动行为。
- ScrollTargetBehaviorContext — 滚动目标行为用来更新其滚动目标的上下文。
- PagingScrollTargetBehavior — 把滚动目标按容器几何信息对齐的滚动行为。
- ViewAlignedScrollTargetBehavior — 把滚动目标按视图几何信息对齐的滚动行为。
- AnyScrollTargetBehavior — 类型被抹除的滚动目标行为。
- ScrollTargetBehaviorProperties — 影响滚动目标行为所适用滚动视图的属性。
- ScrollTargetBehaviorPropertiesContext — 滚动目标行为用来决定其属性的上下文。
为滚动过渡添加动画
- scrollTransition(_:axis:transition:) — 应用给定的过渡,当该视图在所属滚动视图的可见区域内出现和消失时,在过渡的各个阶段之间添加动画。
- scrollTransition(topLeading:bottomTrailing:axis:transition:) — 应用给定的过渡,当该视图在所属滚动视图的可见区域内出现和消失时,在过渡的各个阶段之间添加动画。
- ScrollTransitionPhase — 视图在与其他视图一起滚动时所经历的过渡阶段。
- ScrollTransitionConfiguration — 滚动过渡的配置,用来控制视图滚过所属滚动视图或其他容器的可见区域时如何应用过渡。
响应滚动视图的变化
- onScrollGeometryChange(for:of:action:) — 添加一个动作,当由滚动的几何信息生成的值发生变化时执行。
- onScrollTargetVisibilityChange(idType:threshold:_:) — 添加一个动作,调用时携带关于哪些视图会被视为可见的信息。
- onScrollVisibilityChange(threshold:_:) — 添加一个动作,当视图越过被视为在屏幕上或不在屏幕上的阈值时调用。
- onScrollPhaseChange(_:) — 添加一个动作,当层级中第一个滚动视图的滚动阶段发生变化时执行。
- ScrollGeometry — 定义滚动视图几何信息的类型。
- ScrollPhase — 描述像滚动视图这样的可滚动视图的滚动手势状态的类型。
- ScrollPhaseChangeContext — 当滚动视图的阶段发生变化时,为你提供更多上下文的类型。
显示滚动指示器
- scrollIndicatorsFlash(onAppear:) — 当可滚动视图出现时闪烁其滚动指示器。
- scrollIndicatorsFlash(trigger:) — 当某个值发生变化时闪烁可滚动视图的滚动指示器。
- scrollIndicators(_:axes:) — 设置该视图内滚动指示器的可见性。
- horizontalScrollIndicatorVisibility — 应用于任何可横向滚动内容的滚动指示器的可见性。
- verticalScrollIndicatorVisibility — 应用于任何可纵向滚动内容的滚动指示器的可见性。
- ScrollIndicatorVisibility — 用户界面元素滚动指示器的可见性。
管理内容可见性
- scrollContentBackground(_:) — 指定该视图内可滚动视图背景的可见性。
- scrollClipDisabled(_:) — 设置滚动视图是否把其内容裁剪到自身边界内。
- ScrollContentOffsetAdjustmentBehavior — 一种类型,定义滚动视图可以采用的各类内容偏移调整行为。
停用滚动
- scrollDisabled(_:) — 停用或启用可滚动视图中的滚动。
- isScrollEnabled — 一个布尔值,指示与该环境关联的任何滚动视图是否允许发生滚动。
配置滚动回弹行为
- scrollBounceBehavior(_:axes:) — 配置可滚动视图在指定轴向上的回弹行为。
- horizontalScrollBounceBehavior — 可滚动视图水平轴向上的滚动回弹模式。
- verticalScrollBounceBehavior — 可滚动视图垂直轴向上的滚动回弹模式。
- ScrollBounceBehavior — 可滚动视图滚动到内容末端时可以回弹的各种方式。
配置滚动边缘效果
- scrollEdgeEffectStyle(_:for:) — 为该层级中滚动视图配置滚动边缘效果样式。
- scrollEdgeEffectHidden(_:for:) — 隐藏该层级中滚动视图的任何滚动边缘效果。
- ScrollEdgeEffectStyle — 一种结构体,用于指定滚动内容与带控件的区域(例如工具栏)之间的模糊过渡。
- safeAreaBar(edge:alignment:spacing:content:) — 在修饰后的视图旁边把指定内容显示为自定义栏。
与软件键盘交互
- scrollDismissesKeyboard(_:) — 配置可滚动内容与软件键盘交互的行为。
- scrollDismissesKeyboardMode — 可滚动内容与软件键盘交互的方式。
- ScrollDismissesKeyboardMode — 可滚动内容与软件键盘交互的各种方式。
为不同输入方式管理滚动
- scrollInputBehavior(_:for:) — 启用或停用使用特定输入时在可滚动视图中的滚动。
- ScrollInputKind — 用于滚动视图的输入方式。
- ScrollInputBehavior — 一种类型,定义输入是否应滚动某个视图。