免费开源的iOS开发学习平台

React Native基础:14-ScrollView组件

ScrollView组件简介

ScrollView组件是一个可以滚动的视图,它可以支持上下方向以及左右方法进行滚动。由于手机屏幕大小有限,通常情况下,不能在一屏幕内展示完整的界面,特别是针对微博、今日头条之类的应用,其内容都来自于服务器,可以说其展示的内容长度是无穷无尽的。因此只能让用户通过滚动操作来进行内容浏览,此时需要借助ScrollView组件。

除了用来展示列表信息,ScrollView组件最常见的到地方就是手机上的浏览器页面。ScrollView组件对于内存性能没有优化。所有组件上的子组件都会被加载到内存中,因此主要在显示内容不是特别多的情况下使用。

ScrollView组件有两个滚动方向,竖直滚动和水平滚动。ScrollView组件在竖直滚动的时候,需要明确的知道它内容的高度。ScrollView组件在水平滚动的时候,需要明确知道它内容的宽度。

在ScrollView组件中,提供了一个重要方法,可以滚动到指定的位置。在下面的方法中,可以指定x与y值,即滚动到指定的x,y偏移处,第三个参数为是否启用平滑滚动动画。

scrollTo(y: number | { x?: number, y?: number, animated?: boolean }, x: number, animated: boolean)

ScrollView组件常用属性

ScrollView组件中提供了如下一些常用的属性和方法,可以对ScrollView组件的样式进行定制,同时可以监控ScrollView组件与用户进行交互的行为,从而可以在用户交互过程中添加额外的功能。

| 属性 | 类型| 值 |
| --- | --- | --- |
onScroll |function |在滚动的过程中,每帧最多调用一次此回调函数。调用的频率可以用scrollEventThrottle属性来控制。|
contentOffset |PointPropType |用来手动设置初始的滚动坐标。默认值为{x: 0, y: 0}。|
| pagingEnabled |bool | 当值为true时,滚动条会停在滚动视图的尺寸的整数倍位置。这个可以用在水平分页上。默认值为false。 |
| showsHorizontalScrollIndicator |bool | 当此属性为true的时候,显示一个水平方向的滚动条。 |
| showsVerticalScrollIndicator |bool | 当此属性为true的时候,显示一个垂直方向的滚动条。 |
| scrollEnabled |bool | 当值为false的时候,内容不能滚动,默认值为true。 |
| maximumZoomScale |number | 允许的最大缩放比例。默认值为1.0。 |
| minimumZoomScale |number | 允许的最小缩放比例。默认值为1.0。 |
| stickyHeaderIndices |[number] | 一个子视图下标的数组,用于决定哪些成员会在滚动之后固定在屏幕顶端。举个例子,传递stickyHeaderIndices={[

示例代码

现在我们来编写一个简单的示例代码,在ScrollView组件中存放200个Text组件。最终的效果是手机屏幕上展示200条文本,可以用手指上下滑动来进行浏览。

  • 在终端中执行如下命令,创建ScrollViewDemo工程;
react-native init ScrollViewDemo
  • 使用Atom打开工程的index.ios.js文件,编写组件所使用的样式;
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#F5FCFF',
    paddingTop: 20,
  },
  verticalScrollView: {
    flex: 1,
    margin: 10,
  },
});
  • 在一个ScrollView组件中添加200个Text组件;
var NUM_ITEMS = 200;

export default class ScrollViewDemo extends Component {
  makeItems(nItems: number, styles) {
    var items = [];
    for (var i = 0; i < nItems; i++) {
       items[i] = (
         <Text key={i}>{'这是第 ' + i + '行'}</Text>
       );
    }
    return items;
  };

  render() {
    var items = this.makeItems(NUM_ITEMS, styles.itemWrapper);
    var verticalScrollView = (
      <ScrollView style={styles.verticalScrollView}>
        {items}
      </ScrollView>
    );

    var view = (
      <View style={styles.container}>
        {verticalScrollView}
      </View>
    )
    return view;
  }
}
  • 使用import加载项目所使用的模块,并且注册组件ScrollViewDemo成为整个应用的根容器
import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  ScrollView,
} from 'react-native';

AppRegistry.registerComponent('ScrollViewDemo', () => ScrollViewDemo);
  • 在终端中执行下面的命令运行程序,在iOS模拟器中可以看到ScrollView组件中添加的Text组件,并且可以上下滑动,在屏幕的右侧可以看到垂直方向的位置指示器。
react-native run-ios