React Native ScrollView : 属性和方法

方法_Methods:

  1. scrollToEnd()
scrollToEnd(([options]: {animated: boolean, duration: number}));
  • animated defaults to true
  • duration specify for Android
  1. scrollTo()
scrollTo({x: 0, y: 0, animated: true})
  1. flashScrollIndicators()

短暂地显示滚动指示器。


属性_Props:

zoom 相关

  1. bouncesZoom = {true} : 弹性 , 手势可以驱动缩放超过最小/大,缩放将在手势结束时动画到最小/大值。
  2. maximumZoomScale
  3. minimumZoomScale
  4. zoomScale: The current scale of the scroll view content
  5. pinchGestureEnabled= {true} : 允许手势缩放

stickyHeader 相关

  1. stickyHeaderIndices= {[0]} : the first child to be fixed to the top of the scroll view.
  2. invertStickyHeaders= {true} : stick at the bottom instead of the top of the ScrollView.

翻页相关

page :翻整页

  • pagingEnabled Noted:Vertical pagination is not supported on Android.

snap :翻半页

Snap in computer graphics - wiki

In computer graphics, snapping allows an object to be easily positioned in alignment with grid lines, guide lines or another object, by causing it to automatically jump to an exact position when the user drags it to the proximity of the desired location.

  • snapToInterval :number [ interval :间距 ] 等间距
    当设置了此属性时,会让滚动视图滚动停止后,停止在snapToInterval的倍数的位置。这可以在一些子视图比滚动视图本身小的时候用于实现分页显示。需要与snapToAlignment组合使用。
  • snapToAlignment: enum('start', 'center', 'end')
    当snapToInterval指定时,这个属性定义这个停驻点相对于Scroll View的关系。
  • snapToOffsets : [30, 50, 80] 不等间距
  • snapToEnd : false
    Use in conjunction with snapToOffsets. The default value is true. set false to disable this behavior and allow the list to scroll freely between its end and the last snapToOffsets offset.
  • snapToStart : true
    Use in conjunction with snapToOffsets. The default value is true. set false to disable this behavior and allow the list to scroll freely between its start and the first snapToOffsets offset.

snapToOffsets : Overrides less configurable pagingEnabled and snapToInterval props.
snapToInterval : Overrides less configurable pagingEnabled prop.


Indicator 相关

  • indicatorStyle : enum('default', 'black', 'white')
  • scrollIndicatorInsets:
    决定滚动条距离视图边缘的坐标。这个值应该和contentInset一样。默认值为{0, 0, 0, 0}。
  • showsHorizontalScrollIndicator
  • showsVerticalScrollIndicator

Delegate 方法

  • onContentSizeChange : 此函数会在ScrollView内部可滚动内容的视图发生变化时调用。
// eg:  
 onContentSizeChange={(contentWidth, contentHeight) => {
      this.scrollView.scrollToEnd({ animated: true });
  }}
  • onMomentumScrollBegin:滚动开始
  • onMomentumScrollEnd: 滚动结束
  • onScrollBeginDrag: 开始拖拽,加速度为+
  • onScrollEndDrag:结束拖拽,加速度为-,仍有速度,未结束滚动
  • onScrollToTop:
    Fires when the scroll view scrolls to top after the status bar has been tapped.
  • onScroll : onScroll?: (event: ScrollEvent) => void
    在滚动的过程中,每帧最多调用一次此回调函数。调用的频率可以用scrollEventThrottle属性来控制。
//  ScrollEvent
{  
   nativeEvent:{  
      contentInset:{  
         bottom,
         left,
         right,
         top
      },
      contentOffset:{  
         x,
         y
      },
      contentSize:{  
         height,
         width
      },
      layoutMeasurement:{  
         height,
         width
      },
      zoomScale
   }
}

与Delegate关联的Props:

  • scrollsToTop: (related to onScrollToTop)
    When true, the scroll view scrolls to top when the status bar is tapped. The default value is true.
  • scrollEventThrottle : (related to onScroll)
    这个属性控制在滚动过程中,scroll事件被调用的频率(单位是每秒事件数量)。更小的数值能够更及时的跟踪滚动位置,不过可能会带来性能问题,因为更多的信息会通过bridge传递。由于JS事件循环需要和屏幕刷新率同步,因此设置1-16之间的数值不会有实质区别。默认值为0,意味着每次视图被滚动,scroll事件只会被调用一次。

下拉刷新

  • refreshControl
    指定RefreshControl组件,用于为ScrollView提供下拉刷新功能。只能用于垂直视图,即horizontal不能为true

键盘收起

  • keyboardDismissMode

Determines whether the keyboard gets dismissed in response to a drag.
用户拖拽滚动视图的时候,是否要隐藏软键盘。

跨平台可用的值

  • 'none' (默认值),拖拽时不隐藏软键盘。
  • 'on-drag',当拖拽开始的时候隐藏软键盘。

仅iOS可用的值

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

  • keyboardShouldPersistTaps

Determines when the keyboard should stay visible after a tap.
如果当前界面有软键盘,那么点击scrollview后是否收起键盘,取决于本属性的设置。

  • 'never' (默认值),点击TextInput以外的子组件会使当前的软键盘收起。此时子元素不会收到点击事件。
  • 'always',键盘不会自动收起,ScrollView也不会捕捉点击事件,但子组件可以捕获。
  • 'handled',当点击事件被子组件捕获时,键盘不会自动收起。这样切换TextInput时键盘可以保持状态。多数带有TextInput的情况下你应该选择此项。

(Noted:很多人反应TextInput无法自动失去焦点/需要点击多次切换到其他组件等等问题,其关键都是需要将TextInput放到ScrollView中再设置本属性)


其他

  • scrollToOverflowEnabled:非用户操作,指编程方式「 scrollTo() 」。
    When true, the scroll view can be programmatically scrolled beyond its content size. The default value is false.

  • scrollPerfTag:?? 不懂 不懂 求高人指点
    https://facebook.github.io/react-native/docs/scrollview#scrollperftag

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

  • scrollEnabled: 「 是否可用户操作滚动 」
    When false, the view cannot be scrolled via touch interaction. The default value is true.
    Note that the view can always be scrolled by calling scrollTo().

  • removeClippedSubviews: 「 实验特性 」「 提高性能 」「 default = true 」
    Experimental: When true, offscreen child views (whose overflow value is hidden) are removed from their native backing superview when offscreen. This can improve scrolling performance on long lists. The default value is true.

  • persistentScrollbar:
    Causes the scrollbars not to turn transparent when they are not in use. The default value is false.

  • overScrollMode: 覆盖默认的overScroll模式
    可选的值有:

    • 'auto' - 默认值,允许用户在内容超出视图高度之后可以滚动视图。
    • 'always' - 无论内容尺寸,用户始终可以滚动视图。
    • 'never' - 始终不允许用户滚动视图。
  • nestedScrollEnabled:
    在Android API level 21(5.0)以上启用嵌套滚动。iOS上默认支持嵌套滚动。

  • contentContainerStyle:
    These styles will be applied to the scroll view content container which wraps all of the child views. Example:

  • disableIntervalMomentum:
    When true, the scroll view stops on the next index (in relation to scroll position at release) regardless of how fast the gesture is. This can be used for horizontal pagination when the page is less than the width of the ScrollView. The default value is false.
    当为真时,无论手势的速度有多快,滚动视图都会在下一个索引处停止(相对于释放时的滚动位置)。当页面的宽度小于ScrollView的宽度时,可以使用它进行水平分页。默认值为false。

  • decelerationRate:
    一个浮点数,用于决定当用户抬起手指之后,滚动视图减速停下的速度。你也可以设置为"normal"或者"fast",分别对应的是iOS上的UIScrollViewDecelerationRateNormal和 UIScrollViewDecelerationRateFast。
    'normal': iOS上是0.998,Android上是0.985(默认值)
    'fast': 0.99

其实是物理上的摩擦力的大小,失去动力在摩擦力的作用下,加速度为负,所以最终会停下。

  • contentInsetAdjustmentBehavior:
    This property specifies how the safe area insets are used to modify the content area of the scroll view. The default value of this property is "never". Available on iOS 11 and later.

  • 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.


VR Platfrom Props

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,099评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,828评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,540评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,848评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,971评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,132评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,193评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,934评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,376评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,687评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,846评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,537评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,175评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,887评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,134评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,674评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,741评论 2 351

推荐阅读更多精彩内容

  • Documentation Supported OS & SDK Versions 支持的OS & SDK版本 S...
    c5550ea746f8阅读 4,335评论 0 2
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,449评论 0 13
  • 很多人对于日更有着诸多的苦难。没有灵感、没有时间、没有素材,没有太多东西。但是在我看来日更并不难,难的是,日更的每...
    两个胖女孩阅读 127评论 0 2
  • 催眠,通常被大家认知为神秘的、惊险的、刺激的、有趣的,但其实催眠是非常科学的,并且可以帮到我们去解决人生以及生活中...
    武瑜阅读 322评论 0 0
  • 孩子遇到问题时,你是选择焦虑困惑深陷其中,亦或到处寻找方法解决问题,还是选择自我成长执着的栽培自己,以便有能力更好...
    彭丹的微笑阅读 238评论 2 3