[关闭]
@yzzer 2021-03-05T11:23:13.000000Z 字数 2485 阅读 431

React Native 滚动视图 ScrollView

低头一族的我们,每天花大把大把的时间拉啊拉啊。当屏幕的内容超过一屏时,我们很熟练的往上拉一点就可以看到剩下的内容了,这时候右边还会滚动条告诉我们这是可以往上拉的。

这看起来很简单的内容,并不是每个 React Native 组件天生都自带的。并不是每个组件要显示的内容超过一屏时可以往上拉。

那个我们所熟悉的组件之母 `` 就不支持这种操作。

例如下面的代码,我们在一个 `` 中显示一组 语言 时,超过的部分就被截掉了。

App.js

  1. import React, { Component } from 'react';
  2. import { Text, View, StyleSheet} from 'react-native';
  3. class App extends Component {
  4. state = {
  5. languages: [
  6. {'name': 'Python', 'id': 1},
  7. {'name': 'Perl', 'id': 2},
  8. {'name': 'PHP', 'id': 3},
  9. {'name': 'Ruby', 'id': 4},
  10. {'name': 'Scala', 'id': 5},
  11. {'name': 'JavaScript', 'id': 6},
  12. {'name': 'Rust', 'id': 7},
  13. {'name': 'Go', 'id': 8},
  14. {'name': 'Java', 'id': 9},
  15. {'name': 'C++', 'id': 10},
  16. {'name': 'C', 'id': 11},
  17. {'name': 'Awk', 'id': 12},
  18. {'name': 'Sed', 'id': 13},
  19. {'name': 'TypeScript', 'id': 14},
  20. {'name': 'C#', 'id': 15},
  21. {'name': 'F#', 'id': 16},
  22. {'name': 'CSS', 'id': 17},
  23. {'name': 'HTML', 'id': 18},
  24. {'name': 'React Native', 'id': 19}
  25. ]
  26. }
  27. render() {
  28. return (
  29. <View style={styles.list}>
  30. {
  31. this.state.languages.map((item, index) => (
  32. <View key = {item.id} style = {styles.item}>
  33. <Text>{item.name}</Text>
  34. </View>
  35. ))
  36. }
  37. </View>
  38. )
  39. }
  40. }
  41. export default App
  42. const styles = StyleSheet.create ({
  43. list: {
  44. backgroundColor:'#eeeeee',
  45. },
  46. item: {
  47. flexDirection: 'row',
  48. justifyContent: 'space-between',
  49. alignItems: 'center',
  50. padding: 30,
  51. marginBottom: 8,
  52. backgroundColor: '#ffffff'
  53. }
  54. })

运行效果图如下,不管我们怎么卖力的拉啊拉,Go 语言下面的那些语言始终是看不到的。

为了解决这个问题,为了解决那些不支持滚动的组件内容超过一屏的问题。 ScrollView 组件诞生了。

ScrollView 滚动视图组件

`` 滚动视图组件,顾名思义,就是当内容超过指定的高度时会可以通过滑动来显示,右边还会显示滚动条。

`` 的使用很简单,只要包括在要滚动的组件外面就可以了。

例如上面那个范例,我们只需要做一点点的修改

App.js

  1. import React, { Component } from 'react';
  2. import { Text, View, ScrollView, StyleSheet} from 'react-native';
  3. class App extends Component {
  4. state = {
  5. languages: [
  6. {'name': 'Python', 'id': 1},
  7. {'name': 'Perl', 'id': 2},
  8. {'name': 'PHP', 'id': 3},
  9. {'name': 'Ruby', 'id': 4},
  10. {'name': 'Scala', 'id': 5},
  11. {'name': 'JavaScript', 'id': 6},
  12. {'name': 'Rust', 'id': 7},
  13. {'name': 'Go', 'id': 8},
  14. {'name': 'Java', 'id': 9},
  15. {'name': 'C++', 'id': 10},
  16. {'name': 'C', 'id': 11},
  17. {'name': 'Awk', 'id': 12},
  18. {'name': 'Sed', 'id': 13},
  19. {'name': 'TypeScript', 'id': 14},
  20. {'name': 'C#', 'id': 15},
  21. {'name': 'F#', 'id': 16},
  22. {'name': 'CSS', 'id': 17},
  23. {'name': 'HTML', 'id': 18},
  24. {'name': 'React Native', 'id': 19}
  25. ]
  26. }
  27. render() {
  28. return (
  29. <View style={styles.list}>
  30. <ScrollView>
  31. {
  32. this.state.languages.map((item, index) => (
  33. <View key = {item.id} style = {styles.item}>
  34. <Text>{item.name}</Text>
  35. </View>
  36. ))
  37. }
  38. </ScrollView>
  39. </View>
  40. )
  41. }
  42. }
  43. export default App
  44. const styles = StyleSheet.create ({
  45. list: {
  46. backgroundColor:'#eeeeee',
  47. },
  48. item: {
  49. flexDirection: 'row',
  50. justifyContent: 'space-between',
  51. alignItems: 'center',
  52. padding: 30,
  53. marginBottom: 8,
  54. backgroundColor: '#ffffff'
  55. }
  56. })

运行效果如下

https://www.twle.cn/static/upload/img/2019/07/09/20190709203738_4.mp4

通过上下滑动视图,我们就可以看到所有的语言了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注