滚动视图

17 Mar 2025 | 6 分钟阅读

在 iOS 应用程序中,有时我们需要显示不适合屏幕的内容。 为了显示此类内容,我们在应用程序中使用 ScrollView。 ScrollView 允许用户拖动内容区域。 它是 UIScrollView 类的实例,它继承自 UIView。

ScrollView 允许滚动和缩放其包含的视图。 tableview 和 collectionview 是 UIScrollView 的子类,因此,这些类提供了一种很好的方式来显示大于屏幕的内容。 在 iOS 应用程序中,我们使用 tableview 来显示垂直可滚动内容,并使用 collectionview 来显示水平可滚动内容。

UIScrollView 对象的位置可以在内容视图上进行调整。 ScrollView 跟踪手指的移动并相应地调整其位置。

将 ScrollView 添加到界面

与其他对象相比,将 ScrollView 添加到界面构建器有点复杂。 我们需要定义自动布局规则,以指导滚动视图在不同屏幕设备上的布局和位置。

按照以下步骤使用界面构建器 (main.storyboard) 将滚动视图添加到界面。

  • 在 main.storyboard 上搜索 ScrollView,然后将结果拖到 ViewController。
iOS ScrollView
  • 为 ScrollView 定义自动布局规则(约束),如下图所示。
iOS ScrollView
  • 将 ContentView 添加到 ScrollView 并为内容视图定义自动布局规则。
iOS ScrollView

将 ContentView 的约束边距设置为 ScrollView 的 0。 我们还需要使它们的高度和宽度相等。

iOS ScrollView

将 ContentView 的优先级设置为低,如下图所示。 这是此设置中最重要的一步;否则,滚动视图将不会滚动。

iOS ScrollView

我们将在故事板上拥有 ScrollView 和 ContentView。 由于 ScrollView 仅在内容大小不适合 iPhone 屏幕的整个屏幕时才起作用。 我们在 XCode 的大小检查器中定义 ViewController 屏幕的大小。 默认情况下,ViewController 的模拟大小是固定的。 但是,我们需要将其设置为自由形式,并提供一个大于当前屏幕高度的高度,如下所示。

iOS ScrollView

将 UILabel 添加到 ScrollView 的顶部、中心和底部,并在它们之间留出垂直间距,以测试 ScrollView 是否正常工作。 添加 UILabels 并更改背景颜色后,界面构建器将如下所示。

iOS ScrollView

上面的设置将使 ScrollView 滚动以显示屏幕上的所有内容。

iOS ScrollView

ScrollView 属性

UIScrollView 类包含以下属性。

序号属性类型描述
1DelegateUIScrollViewDelegate它是 ScrollView 对象的委托。
2contentSizeCGSize它表示内容视图的大小。
3contentOffsetCGPoint它表示内容视图的原点相对于 ScrollView 原点的偏移点。
4adjustedContentOffsetUIEdgeInsets它表示来自内容插图和滚动视图安全区域的插图。
5frameLayoutGuideUILayoutGuide基于滚动视图的未转换框架矩形的布局指南。
6contentLayoutGuideUILayoutGuide基于滚动视图的未转换内容矩形的布局指南。
7isScrollEnabledBool它表示一个布尔值,用于指示是否启用了滚动视图。
8isDirectionLockEnabledBool它表示一个布尔值,用于指示滚动视图是否可以在特定方向上滚动。
9isPagingEnabledBool它是一个布尔值,表示是否在特定方向上启用了分页。
10scrollsToTopBool它是一个布尔值,用于控制是否启用滚动到顶部的手势。
11bouncesBool它是一个布尔值,用于表示滚动视图是否在内容边缘上弹跳。
12alwaysBounceVerticalBool它是一个布尔值,表示当垂直滚动到达内容末尾时是否总是发生弹跳。
13alwaysBounceHorizontalBool它是一个布尔值,表示当水平滚动到达内容末尾时是否总是发生弹跳。
14isTrackingBool它是一个布尔值,用于表示用户是否触摸内容以启动滚动
15isDraggingBool它是一个布尔值,用于表示用户是否已开始滚动内容。
16isDeceleratingBool它是一个布尔值,用于表示当用户停止拖动或抬起手指时,内容是否在滚动视图中移动。
17decelerationRateUIScrollView.DelcelerationRate它是一个浮点值,用于确定用户抬起手指后减速的速率。
18indicatorStyleUIScrollView.IndicatorStyle它表示滚动指示器的样式。
19showsHorizontalScrollsIndicatorBool它是一个布尔值,用于表示水平滚动指示器是否可见。
20showsVerticalScrollIndicatorBool它是一个布尔值,用于表示垂直滚动指示器是否可见。
21refreshControlUIRefreshControl它表示与滚动视图关联的刷新控件。
22canCancelContentTouchesBool它是一个布尔值,用于控制。
23delayContentTouchesBool它是一个布尔值,用于表示滚动视图是否延迟处理触摸手势。
24directionPressGestureRecognizerUIGestureRecognizer方向按钮按下的底层手势识别器。
25panGestureRecognizerUIPanGestureRecongnizer平移手势的底层手势识别器。
26pinchGestureRecognizerUIPinchGestureRecognizer捏合手势的底层手势识别器。
27zoomScaleCGFloat它是一个浮点值,用于缩放滚动视图内容的缩放。
28maximumZoomScaleCGFloat它可以应用于滚动视图内容的缩放的最大浮点值。
29minimumZoomScaleCGFloat它可以应用于滚动视图内容的缩放的最小浮点值。
30isZoomBouncingBool它是一个布尔值,用于表示缩放是否已超出关联的缩放限制。
31isZoomingBool它是一个布尔值,用于表示内容视图当前是否正在缩放。
32bouncesZoomBool它是一个布尔值,用于表示当缩放超过最大或最小限制时,滚动视图是否为内容缩放设置动画。

示例

这是一个简单的示例,我们将创建一个 ScrollView 和 ContentView。 我们将在滚动视图中创建两个 UIViews 以显示实际内容。

界面生成器

在此示例中,我们将使用包含内容视图的滚动视图。 将滚动内容视图以显示两个 uiview。 为此,请使用本教程中给出的说明将滚动视图添加到界面构建器并将滚动视图添加到界面。

将 UIView 添加到 ScrollView 并为 UIView 定义自动布局规则。 将 UIView (ContentView) 添加到滚动视图后,我们需要将两个 UIViews 和一个 UIButton 添加到故事板。

为了使 ScrollView 可滚动,我们需要将 ViewController 大小从固定更改为自由形式,并在视图之间定义一些垂直间距。

设置 ScrollView、ContentView、UIviews 和提交按钮的自动布局规则。

ScrollView 的 AutoLayout 规则

iOS ScrollView

ContentView 的 AutoLayout 规则

iOS ScrollView

AdminDetailsView 的 AutoLayout 规则

iOS ScrollView

UserDetailView 的 AutoLayout 规则

iOS ScrollView

Main.storyboard

iOS ScrollView

ViewController.swift

输出

iOS ScrollView