Vue NativeVue Native
Guide
Components
Composables
Navigation
  • iOS
  • Android
  • macOS
GitHub
Guide
Components
Composables
Navigation
  • iOS
  • Android
  • macOS
GitHub
  • Layout

    • VView
    • VScrollView
    • VSafeArea
    • VKeyboardAvoiding
  • Text & Input

    • VText
    • VInput
  • Interactive

    • VButton
    • VPressable
    • VSwitch
    • VSlider
    • VSegmentedControl
    • VCheckbox
    • VRadio
    • VDropdown
    • VRefreshControl
  • Media

    • VImage
    • VWebView
    • VVideo
  • Lists

    • VList
    • VFlatList
    • VSectionList
  • Feedback

    • VActivityIndicator
    • VProgressBar
    • VAlertDialog
    • VActionSheet
    • VModal
    • VErrorBoundary
  • Transition & State

    • VTransition & VTransitionGroup
    • KeepAlive
    • VSuspense
  • Navigation

    • VNavigationBar
    • VTabBar
  • System

    • VStatusBar
    • VPicker
  • macOS

    • VToolbar
    • VSplitView
    • VOutlineView

VScrollView

A scrollable container component. Maps to UIScrollView on iOS and ScrollView on Android.

Usage

<template>
  <VScrollView :style="{ flex: 1 }" @scroll="onScroll">
    <VView v-for="item in items" :key="item.id" :style="styles.row">
      <VText>{{ item.title }}</VText>
    </VView>
  </VScrollView>
</template>

Horizontal Scrolling

<VScrollView :horizontal="true" :style="{ height: 200 }">
  <VView v-for="card in cards" :key="card.id" :style="styles.card">
    <VText>{{ card.title }}</VText>
  </VView>
</VScrollView>

Pull to Refresh

Use the refreshing prop and @refresh event for pull-to-refresh:

<template>
  <VScrollView
    :style="{ flex: 1 }"
    :refreshing="isRefreshing"
    @refresh="onRefresh"
  >
    <VText v-for="item in items" :key="item.id">{{ item.title }}</VText>
  </VScrollView>
</template>

<script setup>
import { ref } from 'vue-native'

const isRefreshing = ref(false)
const items = ref([/* ... */])

async function onRefresh() {
  isRefreshing.value = true
  items.value = await fetchItems()
  isRefreshing.value = false
}
</script>

Props

PropTypeDefaultDescription
horizontalBooleanfalseScroll horizontally instead of vertically
showsVerticalScrollIndicatorBooleantrueShow vertical scroll indicator
showsHorizontalScrollIndicatorBooleanfalseShow horizontal scroll indicator
scrollEnabledBooleantrueEnable/disable scrolling
bouncesBooleantrueEnable bounce at scroll boundaries
pagingEnabledBooleanfalseSnap to pages when scrolling
refreshingBooleanfalseWhether the pull-to-refresh indicator is active
contentContainerStyleObject—Style for the inner content container
scrollEventThrottleNumber16Minimum interval in milliseconds between scroll events. Lower values give more frequent updates but may impact performance.
styleObject—Style for the scroll view
accessibilityLabelstring—A text label for assistive technologies
accessibilityRolestring—The accessibility role (e.g. 'scrollbar')
accessibilityHintstring—Describes what happens when the user interacts with the element
accessibilityStateObject—Accessibility state object

Events

EventPayloadDescription
scroll{ x, y, contentWidth, contentHeight, layoutWidth, layoutHeight }Fired on scroll with current offset and content/layout dimensions
refresh—Fired when the user pulls to refresh
Edit this page
Last Updated: 2/28/26, 11:24 PM
Contributors: Abdul Hamid, Claude Opus 4.6
Prev
VView
Next
VSafeArea