Spec-Zone.ru › React Native

ScrollView

Компонент, который оборачивает платформенный ScrollView, обеспечивая интеграцию с системой блокировки касаний "responder".

Обратите внимание, что ScrollView должен иметь ограниченную высоту для работы, так как он содержит элементы с неограниченной высотой в ограниченном контейнере (через взаимодействие со скроллингом). Для ограничения высоты ScrollView либо установите высоту представления напрямую (не рекомендуется), либо убедитесь, что все родительские представления имеют ограниченную высоту. Забывание передачи {flex: 1} вниз по стеку представления может привести к ошибкам, которые легко отлаживать с помощью инспектора элементов.

Пока не поддерживает другие связанные компоненты responder, которые могли бы блокировать этот scroll view от того, чтобы стать responder.

<ScrollView> по сравнению с <FlatList> — какой использовать?

ScrollView отображает все свои реактивные дочерние компоненты сразу, но это имеет недостатки с точки зрения производительности.

Представьте, что у вас очень длинный список элементов, которые вы хотите отобразить, возможно, на несколько экранов. Создание JS-компонентов и нативных представлений для всего сразу, большая часть из которых даже не отображается, приведет к медленному отображению и увеличению использования памяти.

Вот где FlatList вступает в игру. FlatList отображает элементы лениво, когда они собираются появиться, и удаляет элементы, которые прокручиваются за пределы экрана, чтобы сэкономить память и время обработки.

FlatList также полезно, если вы хотите отображать разделители между элементами, несколько столбцов, бесконечную прокрутку с загрузкой или любое количество других функций, которые он поддерживает по умолчанию.

Справочник

Свойства

Свойства View

Наследует Свойства View.

StickyHeaderComponent

Реактивный компонент, который будет использоваться для отображения заголовков, которые прилипают к верху, должен использоваться вместе с stickyHeaderIndices. Возможно, вам нужно будет установить этот компонент, если ваш прилипающий заголовок использует пользовательские преобразования, например, когда вы хотите, чтобы у вашего списка был анимируемый и скрываемый заголовок. Если компонент не предоставлен, по умолчанию используется компонент ScrollViewStickyHeader.

Тип
компонент, элемент

alwaysBounceHorizontal
iOS

Если значение true, представление со скроллингом отскакивает по горизонтали при достижении конца, даже если содержимое меньше самого представления со скроллингом.

Тип Значение по умолчанию
bool true если horizontal={true}false в противном случае

alwaysBounceVertical
iOS

Если значение true, представление со скроллингом отскакивает по вертикали при достижении конца, даже если содержимое меньше самого представления со скроллингом.

Тип Значение по умолчанию
bool false если vertical={true}true в противном случае

automaticallyAdjustContentInsets
iOS

Управляет тем, автоматически ли iOS корректирует отступ содержимого для представлений со скроллингом, которые размещены под навигационной строкой или панелью вкладок/панелью инструментов.

Тип Значение по умолчанию
bool true

automaticallyAdjustKeyboardInsets
iOS

Управляет тем, автоматически ли ScrollView корректирует свои contentInset и scrollViewInsets при изменении размера клавиатуры.

Тип Значение по умолчанию
bool false

automaticallyAdjustsScrollIndicatorInsets
iOS

Управляет тем, автоматически ли iOS корректирует отступы индикатора прокрутки. См. документацию Apple по этому свойству.

Тип Значение по умолчанию
bool true

bounces
iOS

Если значение true, представление со скроллингом отскакивает при достижении конца содержимого, если содержимое больше представления со скроллингом вдоль оси направления прокрутки. Когда false, отскок отключается, даже если свойства alwaysBounce* имеют значение true.

Тип Значение по умолчанию
bool true

bouncesZoom
iOS

Если true, жесты могут управлять масштабированием, выходя за пределы минимальных/максимальных значений, и масштабирование анимируется до минимальных/максимальных значений в конце жеста, в противном случае масштабирование не будет превышать пределы.

Тип Значение по умолчанию
bool true

canCancelContentTouches
iOS

Если false, после начала отслеживания попытка перетащить не будет выполняться, если палец перемещается.

Тип Значение по умолчанию
bool true

centerContent
iOS

Если true, представление со скроллингом автоматически центрирует содержимое, когда содержимое меньше границ представления со скроллингом; когда содержимое больше, чем границы представления со скроллингом, это свойство не оказывает влияния.

Тип Значение по умолчанию
bool false

contentContainerStyle

Эти стили будут применены к контейнеру содержимого представления со скроллингом, который оборачивает все дочерние представления. Пример:

return (
  <ScrollView contentContainerStyle={styles.contentContainer}>
  </ScrollView>
);
...
const styles = StyleSheet.create({
  contentContainer: {
    paddingVertical: 20
  }
});
Тип
Стили View

contentInset
iOS

Величина, на которую содержимое представления со скроллингом смещено от краев представления со скроллингом.

Тип Значение по умолчанию
объект: {верх: число, слева: число, низ: число, справа: число} {top: 0, left: 0, bottom: 0, right: 0}

contentInsetAdjustmentBehavior
iOS

Это свойство определяет, как отступы безопасной области используются для изменения области содержимого представления со скроллингом. Доступно на iOS 11 и более поздних версиях.

Тип Значение по умолчанию
перечисление('automatic', 'scrollableAxes', 'never', 'always') 'never'

contentOffset

Используется для ручного задания начального смещения прокрутки.

Тип Значение по умолчанию
Точка {x: 0, y: 0}

decelerationRate

Число с плавающей точкой, которое определяет, насколько быстро представление со скроллингом замедляется после того, как пользователь отпустит палец. Вы также можете использовать сокращения "normal" и "fast", которые соответствуют настройкам iOS для UIScrollViewDecelerationRateNormal и UIScrollViewDecelerationRateFast соответственно.

  • 'normal' 0.998 на iOS, 0.985 на Android.
  • 'fast', 0.99 на iOS, 0.9 на Android.
Тип Значение по умолчанию
перечисление('fast', 'normal'), число 'normal'

directionalLockEnabled
iOS

Если значение true, ScrollView будет пытаться заблокировать прокрутку только по вертикали или горизонтали во время перетаскивания.

Тип Значение по умолчанию
bool false

disableIntervalMomentum

Если значение true, представление со скроллингом останавливается на следующем индексе (относительно положения прокрутки при отпускании) независимо от скорости жеста. Это можно использовать для пагинации, когда страница меньше ширины горизонтального ScrollView или высоты вертикального ScrollView.

Тип Значение по умолчанию
bool false

disableScrollViewPanResponder

Если значение true, стандартный JS-компонент перетаскивания на ScrollView отключается, и полный контроль над касаниями внутри ScrollView передается его дочерним компонентам. Это особенно полезно, если snapToInterval включен, так как он не следует типичным паттернам касаний. Не используйте это для обычных случаев использования ScrollView без snapToInterval, так как это может привести к неожиданным касаниям во время прокрутки.

Тип Значение по умолчанию
bool false

endFillColor
Android

Иногда scrollview занимает больше места, чем его заполняет содержимое. В таком случае это свойство заполнит оставшуюся часть scrollview цветом, чтобы избежать установки фона и создания ненужного перерисовывания. Это продвинутая оптимизация, которая не требуется в общем случае.

Тип
цвет

fadingEdgeLength
Android

Выцветает края содержимого прокрутки.

Если значение больше 0, края с выцветанием будут установлены соответственно текущему направлению и положению прокрутки, указывая, есть ли больше содержимого для отображения.

Тип Значение по умолчанию
число 0

horizontal

Если true, дочерние элементы представления со скроллингом располагаются по горизонтали в строке вместо вертикального расположения в столбце.

Тип Значение по умолчанию
bool false

indicatorStyle
iOS

Стиль индикаторов прокрутки.

END_OF_DOCUMENT_MARKER
  • 'default' так же, как black.
  • 'black', индикатор прокрутки — black. Этот стиль подходит для светлого фона.
  • 'white', индикатор прокрутки — white. Этот стиль подходит для тёмного фона.
Тип Значение по умолчанию
перечисление('default', 'black', 'white') 'default'

invertStickyHeaders

Если заголовки sticky должны прикрепляться к нижней части, а не к верхней части ScrollView. Обычно используется с инвертированными ScrollView.

Тип Значение по умолчанию
bool false

keyboardDismissMode

Определяет, будет ли клавиатура закрываться при перетаскивании.

  • 'none', перетаскивания не закрывают клавиатуру.
  • 'on-drag', клавиатура закрывается при начале перетаскивания.

Только для iOS

  • 'interactive', клавиатура закрывается интерактивно при перетаскивании и перемещается синхронно с касанием, перетаскивание вверх отменяет закрытие. На Android это не поддерживается и будет иметь такое же поведение, как 'none'.
Тип Значение по умолчанию
перечисление('none', 'on-drag')
Android
перечисление('none', 'on-drag', 'interactive')
iOS
'none'

keyboardShouldPersistTaps

Определяет, когда клавиатура должна оставаться видимой после нажатия.

  • 'never' нажатие вне области ввода текста, когда клавиатура открыта, закрывает клавиатуру. В этом случае дочерние элементы не получат нажатие.
  • 'always', клавиатура не будет автоматически закрываться, и область прокрутки не будет перехватывать нажатия, но дочерние элементы области прокрутки могут перехватывать нажатия.
  • 'handled', клавиатура не будет автоматически закрываться, когда нажатие было обработано дочерними элементами области прокрутки (или перехвачено предком).
  • false, устарело, используйте 'never' вместо этого
  • true, устарело, используйте 'always' вместо этого
Тип Значение по умолчанию
перечисление('always', 'never', 'handled', false, true) 'never'

maintainVisibleContentPosition
iOS

При установке области прокрутки будет корректировать положение прокрутки таким образом, чтобы первый видимый элемент, который находится на или за minIndexForVisible, не менял положение. Это полезно для списков, загружающих содержимое в обоих направлениях, например, для потока чата, где новые сообщения, поступающие, могут в противном случае привести к скачку позиции прокрутки. Значение 0 является распространённым, но можно использовать и другие значения, например, 1 для пропуска индикаторов загрузки или другого содержимого, положение которого не нужно сохранять.

Необязательное autoscrollToTopThreshold может использоваться для автоматической прокрутки содержимого к началу после внесения корректировок, если пользователь находился в пределах порога верха до внесения корректировок. Это также полезно для приложений типа чата, где вы хотите видеть новые сообщения, прокручивающиеся на место, но не в случае, если пользователь прокрутил вверх и это будет нарушать порядок.

Предупреждение 1: Переупорядочивание элементов в ScrollView с включенным этим параметром, вероятно, приведёт к рывковому и неровному отображению. Его можно исправить, но в настоящее время нет планов это сделать. Пока не переупорядочивайте содержимое ScrollView или списков, использующих эту функцию.

Предупреждение 2: В родном коде используется contentOffset и frame.origin для вычисления видимости. Закрытие, преобразования и другие сложности не будут учитываться при определении того, является ли содержимое «видимым» или нет.

Тип
объект: { minIndexForVisible: число, autoscrollToTopThreshold: число }

maximumZoomScale
iOS

Максимальный разрешённый масштаб.

Тип Значение по умолчанию
число 1.0

minimumZoomScale
iOS

Минимальный разрешённый масштаб.

Тип Значение по умолчанию
число 1.0

nestedScrollEnabled
Android

Включает вложенную прокрутку для Android API уровня 21 и выше.

Тип Значение по умолчанию
bool true

onContentSizeChange

Вызывается при изменении размера содержимого области прокрутки ScrollView.

Функция обработчика получает ширину и высоту содержимого в качестве параметров: (contentWidth, contentHeight)

Реализовано с помощью обработчика onLayout, прикреплённого к контейнеру содержимого, который рендерит этот ScrollView.

Тип
функция

onMomentumScrollBegin

Вызывается при начале импульсной прокрутки (прокрутка, которая происходит, когда ScrollView начинает скользить).

Тип
функция

onMomentumScrollEnd

Вызывается при окончании импульсной прокрутки (прокрутка, которая происходит, когда ScrollView останавливается).

Тип
функция

onScroll

Вызывается не более одного раза за кадр во время прокрутки. Частота событий может контролироваться с помощью свойства scrollEventThrottle. Формат события (все значения — числа):

{
  nativeEvent: {
    contentInset: {bottom, left, right, top},
    contentOffset: {x, y},
    contentSize: {height, width},
    layoutMeasurement: {height, width},
    zoomScale
  }
}
Тип
функция

onScrollBeginDrag

Вызывается при начале перетаскивания области прокрутки пользователем.

Тип
функция

onScrollEndDrag

Вызывается, когда пользователь прекращает перетаскивание области прокрутки, и она либо останавливается, либо начинает скользить.

Тип
функция

onScrollToTop
iOS

Вызывается, когда область прокрутки прокручивается в начало после нажатия на строку состояния.

Тип
функция

overScrollMode
Android

Используется для переопределения значения по умолчанию для режима перепрокрутки.

Возможные значения:

  • 'auto' — Разрешить перепрокрутку только если содержимое достаточно для значимой прокрутки.
  • 'always' — Всегда разрешать перепрокрутку.
  • 'never' — Никогда не разрешать перепрокрутку.
Тип Значение по умолчанию
перечисление('auto', 'always', 'never') 'auto'

pagingEnabled

При значении true область прокрутки останавливается на кратных значениях размера области прокрутки при прокрутке. Это можно использовать для горизонтальной постраничной навигации.

Примечание: Горизонтальная постраничная навигация не поддерживается на Android.

Тип Значение по умолчанию
bool false

persistentScrollbar
Android

Заставляет полосы прокрутки не становиться прозрачными, когда они не используются.

Тип Значение по умолчанию
bool false

pinchGestureEnabled
iOS

Если true, ScrollView позволяет использовать жесты щипка для масштабирования.

Тип Значение по умолчанию
bool true

refreshControl

Компонент RefreshControl, используемый для предоставления функциональности pull-to-refresh для ScrollView. Работает только для вертикальных ScrollView (свойство horizontal должно быть false).

См. RefreshControl.

Тип
элемент

removeClippedSubviews

Экспериментально: Если true, внеэкранные дочерние элементы (чьё значение overflow равно hidden) удаляются из их родного родительского представления при выходе за экран. Это может улучшить производительность прокрутки длинных списков.

Тип Значение по умолчанию
bool false

scrollEnabled

Если false, прокрутка невозможна через взаимодействие с касанием.

Обратите внимание, что прокрутку можно выполнить всегда, вызвав scrollTo.

Тип Значение по умолчанию
bool true

scrollEventThrottle
iOS

Этот параметр управляет частотой срабатывания события прокрутки во время прокрутки (в виде интервала времени в мс). Более низкое значение даёт лучшую точность для кода, отслеживающего положение прокрутки, но может привести к проблемам с производительностью прокрутки из-за объёма информации, передаваемой по мосту. Вы не заметите разницы между значениями от 1 до 16, так как цикл выполнения JS синхронизирован со скоростью обновления экрана. Если вам не нужна точная информация о положении прокрутки, установите это значение выше, чтобы ограничить передачу информации через мост. Значение по умолчанию — 0, что приводит к отправке события прокрутки только один раз при каждой прокрутке.

Тип Значение по умолчанию
число 0

scrollIndicatorInsets
iOS

Отступ индикаторов прокрутки от краёв области прокрутки. Обычно он должен быть таким же, как contentInset.

Тип Значение по умолчанию
объект: {верх: число, слева: число, низ: число, справа: число} {top: 0, left: 0, bottom: 0, right: 0}

scrollPerfTag
Android

Тег, используемый для регистрации производительности прокрутки в этом представлении прокрутки. Заставит события импульса быть включенными (см. sendMomentumEvents). Само по себе это ничего не делает, и вам нужно реализовать пользовательский native FpsListener, чтобы оно было полезным.

Тип
строка

scrollToOverflowEnabled
iOS

Когда true, представление прокрутки может быть программно прокручено за пределы размера его содержимого.

Тип Значение по умолчанию
логическое значение false

scrollsToTop
iOS

Когда true, представление прокрутки прокручивается вверху, когда нажата строка состояния.

Тип Значение по умолчанию
логическое значение true

showsHorizontalScrollIndicator

Когда true, отображается индикатор горизонтальной прокрутки.

Тип Значение по умолчанию
логическое значение true

showsVerticalScrollIndicator

Когда true, отображается индикатор вертикальной прокрутки.

Тип Значение по умолчанию
логическое значение true

snapToAlignment
iOS

Когда snapToInterval установлено, snapToAlignment определит отношение привязки к представлению прокрутки.

Возможные значения:

  • 'start' выровняет привязку по левому краю (горизонталь) или верхнему краю (вертикаль).
  • 'center' выровняет привязку по центру.
  • 'end' выровняет привязку по правому краю (горизонталь) или нижнему краю (вертикаль).
Тип Значение по умолчанию
перечисление('start', 'center', 'end') 'start'

snapToEnd

Используется совместно с snapToOffsets. По умолчанию конец списка учитывается как смещение привязки. Установите snapToEnd в значение false, чтобы отключить это поведение и позволить списку свободно прокручиваться между концом и последним snapToOffsets смещением.

Тип Значение по умолчанию
логическое значение true

snapToInterval

При установке это заставляет представление прокрутки останавливаться на кратных значениям snapToInterval. Это может использоваться для постраничного просмотра элементов, которые имеют длину меньше, чем у представления прокрутки. Обычно используется в сочетании с snapToAlignment и decelerationRate="fast". Переопределяет менее настраиваемый pagingEnabled параметр.

Тип
число

snapToOffsets

При установке это заставляет представление прокрутки останавливаться на заданных смещениях. Это можно использовать для постраничного просмотра элементов с различными размерами, которые имеют длину меньше, чем у представления прокрутки. Обычно используется в сочетании с decelerationRate="fast". Переопределяет менее настраиваемые pagingEnabled и snapToInterval параметры.

Тип
массив чисел

snapToStart

Используется совместно с snapToOffsets. По умолчанию начало списка учитывается как смещение привязки. Установите snapToStart в значение false, чтобы отключить это поведение и позволить списку свободно прокручиваться между началом и первым snapToOffsets смещением.

Тип Значение по умолчанию
логическое значение true

stickyHeaderHiddenOnScroll

При установке в true, зафиксированный заголовок будет скрыт при прокрутке вниз по списку и будет прикреплен к верху списка при прокрутке вверх.

Тип Значение по умолчанию
логическое значение false

stickyHeaderIndices

Массив индексов элементов, определяющих, какие элементы прикрепляются к верхней части экрана при прокрутке. Например, передача stickyHeaderIndices={[0]} зафиксирует первый элемент в верхней части представления прокрутки. Вы также можете использовать подобные значения [x,y,z], чтобы закрепить несколько элементов, когда они находятся вверху. Этот параметр не поддерживается в сочетании с horizontal={true}.

Тип
массив чисел

zoomScale
iOS

Текущий масштаб содержимого представления прокрутки.

Тип Значение по умолчанию
число 1.0

Методы

flashScrollIndicators()

flashScrollIndicators();

Временно отображает индикаторы прокрутки.

scrollTo()

scrollTo(
  options?: { x?: number, y?: number, animated?: boolean } | number,
  deprecatedX?: number,
    deprecatedAnimated?: boolean,
);

Прокручивает до заданного смещения x, y, либо мгновенно, либо с плавной анимацией.

Пример:

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

Примечание: Необычная сигнатура функции связана с тем, что по историческим причинам функция также принимает отдельные аргументы как альтернативу объекту параметров. Это устарело из-за неоднозначности (y перед x), и ЕЁ НЕ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ.

scrollToEnd()

scrollToEnd(([options]: { animated: boolean }));

Если это вертикальная прокрутка, прокручивает до низа. Если это горизонтальная прокрутка, прокручивает вправо.

Используйте scrollToEnd({ animated: true }) для плавной анимированной прокрутки, scrollToEnd({ animated: false }) для мгновенной прокрутки. Если не переданы параметры, animated по умолчанию устанавливается в true.

© 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://reactnative.dev/docs/scrollview

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API