一个包装了平台的ScrollView(滚动视图)的组件,同时还集成了触摸锁定的“响应者”系统。

记住ScrollView必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组件装进一个确定高度的容器(通过滚动操作)。要给一个ScrollView确定一个高度的话,要么直接给它设置高度(不建议),要么确定所有的父容器都已经绑定了高度。在视图栈的任意一个位置忘记使用{flex:1}都会导致错误,你可以使用元素查看器来查找问题的原因。

ScrollView内部的其他响应者尚无法阻止ScrollView本身成为响应者。

一:属性

1:contentContainerStyle StyleSheetPropType(ViewStylePropTypes)

这些样式会应用到一个内层的内容容器上,所有的子视图都会包裹在内容容器内。例子:

return (
<ScrollView contentContainerStyle={styles.contentContainer}>
</ScrollView>
);
...
var styles = StyleSheet.create({
contentContainer: {
paddingVertical: 20
}
});

2:horizontal bool

当此属性为true的时候,所有的的子视图会在水平方向上排成一行,而不是默认的在垂直方向上排成一列。默认值为false。

3:keyboardDismissMode enum('none', "interactive", 'on-drag')

用户拖拽滚动视图的时候,是否要隐藏软键盘。

4:none(默认值),拖拽时不隐藏软键盘。

5:on-drag 当拖拽开始的时候隐藏软键盘。

6:interactive 软键盘伴随拖拽操作同步地消失,并且如果往上滑动会恢复键盘。安卓设备上不支持这个选项,会表现的和none一样。

7:keyboardShouldPersistTaps bool

当此属性为false的时候,在软键盘激活之后,点击焦点文本输入框以外的地方,键盘就会隐藏。如果为true,滚动视图不会响应点击操作,并且键盘不会自动消失。默认值为false。

8:onContentSizeChange function

此函数会在ScrollView内部可滚动内容的视图发生变化时调用。

调用参数为内容视图的宽和高: (contentWidth, contentHeight)

此方法是通过绑定在内容容器上的onLayout来实现的。

9:onScroll function

在滚动的过程中,每帧最多调用一次此回调函数。调用的频率可以用scrollEventThrottle属性来控制。

10:refreshControl element

指定RefreshControl组件,用于为ScrollView提供下拉刷新功能。

11:removeClippedSubviews bool

(实验特性):当此属性为true时,屏幕之外的子视图(子视图的overflow样式需要设为hidden)会被移除。这个可以提升大列表的滚动性能。默认值为true。

12:showsHorizontalScrollIndicator bool

当此属性为true的时候,显示一个水平方向的滚动条。

13:showsVerticalScrollIndicator bool

当此属性为true的时候,显示一个垂直方向的滚动条。

有时候滚动视图会占据比实际内容更多的空间。这种情况下可以使用此属性,指定以某种颜色来填充多余的空间,以避免设置背景和创建不必要的绘制开销。一般情况下并不需要这种高级优化技巧。

14:(ios)alwaysBounceHorizontal bool

当此属性为true时,水平方向即使内容比滚动视图本身还要小,也可以弹性地拉动一截。当horizontal={true}时默认值为true,否则为false。

15:(ios)alwaysBounceVertical bool

当此属性为true时,垂直方向即使内容比滚动视图本身还要小,也可以弹性地拉动一截。当horizontal={true}时默认值为false,否则为true。

16:(ios)automaticallyAdjustContentInsets bool

如果滚动视图放在一个导航条或者工具条后面的时候,iOS系统是否要自动调整内容的范围。默认值为true。(译注:如果你的ScrollView或ListView的头部出现莫名其妙的空白,尝试将此属性置为false)

18:(ios)bounces bool

当值为true时,如果内容范围比滚动视图本身大,在到达内容末尾的时候,可以弹性地拉动一截。如果为false,尾部的所有弹性都会被禁用,即使alwaysBounce*属性为true。默认值为true。

19:(ios)bouncesZoom bool

当值为true时,使用手势缩放内容可以超过min/max的限制,然后在手指抬起之后弹回min/max的缩放比例。否则的话,缩放不能超过限制。

20:(ios)canCancelContentTouches bool

当值为false时,一旦有子节点响应触摸操作,即使手指开始移动也不会拖动滚动视图。默认值为true(在以上情况下可以拖动滚动视图。)

21:(ios)centerContent bool

当值为true时,如果滚动视图的内容比视图本身小,则会自动把内容居中放置。当内容比滚动视图大的时候,此属性没有作用。默认值为false。

22:(ios)contentInset {top: number, left: number, bottom: number, right: number}

内容范围相对滚动视图边缘的坐标。默认为{0, 0, 0, 0}。

23:(ios)contentOffset PointPropType

用来手动设置初始的滚动坐标。默认值为{x: 0, y: 0}。

24:(ios)decelerationRate number

一个浮点数,用于决定当用户抬起手指之后,滚动视图减速停下的速度。常见的选项有:

Normal: 0.998 (默认值)

Fast: 0.9

25:(ios)directionalLockEnabled bool

当值为真时,滚动视图在拖拽的时候会锁定只有垂直或水平方向可以滚动。默认值为false。

26:(ios)maximumZoomScale number

允许的最大缩放比例。默认值为1.0。

27:(ios)minimumZoomScale number

允许的最小缩放比例。默认值为1.0。

28:(ios)onRefreshStart function

已过期

请使用refreshControl 属性代替。

29:(ios)onScrollAnimationEnd function

当滚动动画结束之后调用此回调。

30:pagingEnabled bool

当值为true时,滚动条会停在滚动视图的尺寸的整数倍位置。这个可以用在水平分页上。默认值为false。

31:(ios)scrollEnabled bool

当值为false的时候,内容不能滚动,默认值为true。

32:(ios)scrollEventThrottle number

这个属性控制在滚动过程中,scroll事件被调用的频率(单位是每秒事件数量)。更大的数值能够更及时的跟踪滚动位置,不过可能会带来性能问题,因为更多的信息会通过bridge传递。默认值为0,意味着每次视图被滚动,scroll事件只会被调用一次。

33:(ios)scrollIndicatorInsets {top: number, left: number, bottom: number, right: number}

决定滚动条距离视图边缘的坐标。这个值应该和contentInset一样。默认值为{0, 0, 0, 0}。

34:(ios)scrollsToTop bool

当此值为true时,点击状态栏的时候视图会滚动到顶部。默认值为true。

35:(ios)snapToAlignment enum('start', "center", 'end')

当设置了snapToInterval,snapToAlignment会定义停驻点与滚动视图之间的关系。

36:start (默认) 会将停驻点对齐在左侧(水平)或顶部(垂直)

37:center 会将停驻点对齐到中间

38:end 会将停驻点对齐到右侧(水平)或底部(垂直)

39:(ios)snapToInterval number

当设置了此属性时,会让滚动视图滚动停止后,停止在snapToInterval的倍数的位置。这可以在一些子视图比滚动视图本身小的时候用于实现分页显示。与snapToAlignment组合使用。

40:(ios)stickyHeaderIndices [number]

一个子视图下标的数组,用于决定哪些成员会在滚动之后固定在屏幕顶端。举个例子,传递stickyHeaderIndices={[0]}会让第一个成员固定在滚动视图顶端。这个属性不能和horizontal={true}一起使用。

41:(ios)zoomScale number

滚动视图内容初始的缩放比例。默认值为1.0。

二:样式

Flexbox...

ShadowPropTypesIOS#style...

Transforms...

backfaceVisibility enum('visible', 'hidden')

backgroundColor string

borderColor string

borderTopColor string

borderRightColor string

borderBottomColor string

borderLeftColor string

borderRadius number

borderTopLeftRadius number

borderTopRightRadius number

borderBottomLeftRadius number

borderBottomRightRadius number

borderStyle enum('solid', 'dotted', 'dashed')

borderWidth number

borderTopWidth number

borderRightWidth number

borderBottomWidth number

borderLeftWidth number

opacity number

overflow enum('visible', 'hidden')

shadowColor string

shadowOffset {width: number, height: number}

shadowOpacity number

shadowRadius number

androidendFillColor color 

三:方法

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

滚动到指定的x, y偏移处。第三个参数为是否启用平滑滚动动画。

使用示例:

2:scrollTo({x: 0, y: 0, animated: true})

四:实例代码

import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
TextInput,
Alert,
TouchableHighlight,
TouchableOpacity,
WebView,
ScrollView
} from 'react-native'; //导航栏
class ReactNativeProject extends Component {
render() {
return (
<View style={styles.container}>
<Text style={{marginTop:50}}>
进行测试ScrollView控件
</Text>
<ScrollView showsVerticalScrollIndicator={true}
contentContainerStyle={styles.contentContainer}>
<Text
style={{color:'#FFF',margin:5,fontSize:16,backgroundColor:"blue"}}>
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
Shake or press menu button for dev menuShake or press menu button for dev menu
</Text>
</ScrollView>
</View>
);
}
} const styles = StyleSheet.create({
container: {
height:400,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
contentContainer: {
margin:10,
backgroundColor:"#ff0000",
}
}); AppRegistry.registerComponent('ReactNativeProject', () => ReactNativeProject);

效果图:

五:知识点

1:contentContainerStyle

这些样式会应用到一个内层的内容容器上,所有的子视图都会包裹在内容容器内。PS:ScrollView组件的属性不能用style来设置,必须用这个属性名称

否则:

最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

React Native知识9-ScrollView组件的更多相关文章

  1. React Native知识5-Touchable类组件

    React Native 没有像web那样可以给元素绑定click事件,前面我们已经知道Text组件有onPress事件,为了给其他组件 也绑定点击事件,React Native提供了3个组件来做这件 ...

  2. React Native知识

    http://www.cnblogs.com/wujy/tag/React%20Native/    React Native知识12-与原生交互 React Native知识11-Props(属性) ...

  3. React Native 项目常用第三方组件汇总

    React Native 项目常用第三方组件汇总 https://www.jianshu.com/p/d9cd9a868764?utm_campaign=maleskine&utm_conte ...

  4. React Native知识6-NavigatorIOS组件

    NavigatorIOS包装了UIKit的导航功能,可以使用左划功能来返回到上一界面.本组件并非由Facebook官方开发组维护.这一组件的开发完全由社区主导.如果纯js的方案能够满足你的需求的话,那 ...

  5. React Native知识2-Text组件

    Text用于显示文本的React组件,并且它也支持嵌套.样式,以及触摸处理.在下面的例子里,嵌套的标题和正文文字会继承来自styles.baseText的fontFamily字体样式,不过标题上还附加 ...

  6. React Native知识12-与原生交互

    一:原生传递参数给React Native 1:原生给React Native传参 原生给JS传数据,主要依靠属性. 通过initialProperties,这个RCTRootView的初始化函数的参 ...

  7. React Native知识1-FlexBox 布局内容

    一:理论知识点 1:什么是FlexBox布局? 弹性盒模型(The Flexible Box Module),又叫Flexbox,意为“弹性布局”,旨在通过弹性的方式来对齐和分布容器中内容的空间,使其 ...

  8. React Native知识10-ListView组件

    ListView - 一个核心组件,用于高效地显示一个可以垂直滚动的变化的数据列表.最基本的使用方式就是创建一个ListView.DataSource数据源,然后给它传递一个普通的数据数组,再使用数据 ...

  9. React Native知识8-WebView组件

    创建一个原生的WebView,可以用于访问一个网页.可以加载一个URL也可以加载一段html代码: 一:属性 1:iosallowsInlineMediaPlayback bool 指定HTML5视频 ...

随机推荐

  1. ASP.NET Aries DataGrid 配置表头说明文档

    DataGrid 配置表头 字段 中文 说明 Field 字段 注意:mg_ 开头的字段为层级表头 Title 列称 OrderNum 序号 显示的顺序(冻结和非冻结列是两个组的序号) Width 列 ...

  2. Kafka 文档用例

    1.2 用例 以下是一些Kafka 常见的用例.关于功能方面的一些概念,可以看这篇博客:http://engineering.linkedin.com/distributed-systems/log- ...

  3. android笔记:获取View组件宽度以及ViewTreeObserver

    View宽高测量方法: 测量方法有三种,如下: 1)(直接在onCreate()执行) int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureS ...

  4. 从零开始编写自己的C#框架(1)——前言

    记得十五年前自学编程时,拿着C语言厚厚的书,想要上机都不知道要用什么编译器来执行书中的例子.十二年前在大学自学ASP时,由于身边没有一位同学和朋友学习这种语言,也只能整天混在图收馆里拼命的啃书.而再后 ...

  5. vscode常用设置

    1.代码提示快捷键设置:(keybindings.json) { "key": "ctrl+j","command": "edit ...

  6. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  7. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  8. 读书笔记--SQL必知必会05--高级数据过滤

    5.1 组合使用WHERE子句 操作符(operator)也称为逻辑操作符(logical operator),用来联结或改变WHERE子句中的过滤条件. 5.1.1 AND操作符 在WHERE子句中 ...

  9. Error:const char* 类型的实参和LPCWSTR类型的形参不兼容的解决方法。

    在C++的Windows 应用程序中经常碰到这种情况. 解决方法: 加入如下转换函数: LPCWSTR stringToLPCWSTR(std::string orig) { size_t origs ...

  10. 探寻 JavaScript 逻辑运算符(与、或)的真谛

    十二月已经过半,冬季是一个美妙的季节,寒冷的空气逼得人们不得不躲在安逸舒适的环境里生活.冬季会给人一种安静祥和的氛围,让人沉浸在其中,仿佛是一个旧的阶段的结束,同时也是一个新的阶段的开始.这么说来,西 ...