ScrollView
一个封装了平台的 ScrollView(滚动视图)的组件,同时还集成了触摸锁定的“响应者”系统。
记住 ScrollView 必须有一个确定的高度才能正常工作,因为它实际上所做的就是将一系列不确定高度的子组件装进一个确定高度的容器(通过滚动操作)。要给 ScrollView 一个确定的高度的话,要么直接给它设置高度(不建议),要么确定所有的父容器都有确定的高度。一般来说我们会给 ScrollView 设置flex: 1
以使其自动填充父容器的空余空间,但前提条件是所有的父容器本身也设置了 flex 或者指定了高度,否则就会导致无法正常滚动,你可以使用元素查看器来查找具体 哪一层高度不正确。
ScrollView 内部的其他响应者尚无法阻止 ScrollView 本身成为响应者。
ScrollView
和FlatList
应该如何选择?ScrollView 会简单粗暴地把所有子元素一次性全部渲染出来。其原理浅显易懂,使用上自然也最简单。然而这样简单的渲染逻辑自然带来了性能上的不足。想象一下你有一个特别长的列表需要显示,可能有好几屏的高度。创建和渲染那些屏幕以外的 JS 组件和原生视图,显然对于渲染性能和内存占用都是一种极大的拖累和浪费。
这就是为什么我们还有专门的FlatList
组件。FlatList
会惰性渲染子元素,只在它们将要出现在屏幕中时开始渲染。这种惰性渲染逻辑要复杂很多,因而 API 在使用上也更为繁琐。除非你要渲染的数据特别少,否则你都应该尽量使用FlatList
,哪怕它们用起来更麻烦。
此外FlatList
还可以方便地渲染行间分隔线,支持多列布局,无限滚动加载等等。
示例
文档
Props
View Props
继承了所有的View Props.
alwaysBounceHorizontal
iOS
当此属性为 true 时,水平方向即使内容比滚动视图本身还要小,也可以弹性地拉动一截。当horizontal={true}
时默认值为 true,否则为 false。
Type | Default |
---|---|
bool | true when horizontal={true} false otherwise |
alwaysBounceVertical
iOS
当此属性为 true 时,垂直方向即使内容比滚动视图本身还要小,也可以弹性地拉动一截。当horizontal={true}
时默认值为 false,否则为 true。
Type | Default |
---|---|
bool | false when vertical={true} true otherwise |
contentContainerStyle
这些样式会应用到一个内层的内容容器上,所有的子视图都会包裹在内容容器内。示例:
return (
<ScrollView contentContainerStyle={styles.contentContainer}>
</ScrollView>
);
...
const styles = StyleSheet.create({
contentContainer: {
paddingVertical: 20
}
});
类型 | 必需 |
---|---|
StyleSheetPropType(View Style props) | 否 |
disableScrollViewPanResponder
When true, the default JS pan responder on the ScrollView is disabled, and full control over touches inside the ScrollView is left to its child components. This is particularly useful if snapToInterval
is enabled, since it does not follow typical touch patterns. Do not use this on regular ScrollView use cases without snapToInterval
as it may cause unexpected touches to occur while scrolling. The default value is false.
类型 | Required |
---|---|
bool | No |
endFillColor
Android
有时候滚动视图会占据比实际内容更多的空间。这种情况下可以使用此属性,指定以某种颜色来填充多余的空间,以避免设置背景和创建不必要的绘制开销。一般情况下并不需要这种高级优化技巧。
类型 |
---|
color |
fadingEdgeLength
Android
Fades out the edges of the the scroll content.
If the value is greater than 0
, the fading edges will be set accordingly to the current scroll direction and position, indicating if there is more content to show.
Type | Default |
---|---|
number | 0 |
keyboardDismissMode
用户拖拽滚动视图的时候,是否要隐藏软键盘。
跨平台可用的值
'none'
(默认值),拖拽时不隐藏软键盘。'on-drag'
,当拖拽开始的时候隐藏软键盘。
仅 iOS 可用的值
'interactive'