الفرق بين المراجعتين ل"ReactNative/scrollview"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 163: سطر 163:
 
|لا
 
|لا
 
|}
 
|}
 +
 +
=== <code>contentInset</code> ===
 +
تحدد مقدار دخول المحتوى من حواف عرض التمرير, وقيمتها الافتراضية <code>{top: 0, left: 0, bottom: 0, right: 0}</code>.
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
!المنصة
 +
|-
 +
|كائن (object: {top: number, left: number, bottom: number, right: number})
 +
|لا
 +
|iOS
 +
|}
 +
 +
=== <code>contentInsetAdjustmentBehavior</code> ===
 +
تحدد هذه الخاصيّة طريقة استخدام منطقة الإدخال لتعديل منطقة المحتوى في عرض التمرير. والقيمة الافتراضية لها <code>never</code>, ومتوفرة فقط على منصة iOS إصدار 11 وما فوق.
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
!المنصة
 +
|-
 +
|قيمة اسمية (enum('automatic', 'scrollableAxes', 'never', 'always'))
 +
|لا
 +
|iOS
 +
|}
 +
 +
=== <code>contentOffset</code> ===
 +
تُستخدم لتحديد إزاحة بداية التمرير يدويًا, والقيمة الافتراضية لها <code>{x: 0, y: 0}</code>.
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
!المنصة
 +
|-
 +
|PointPropType
 +
|لا
 +
|iOS
 +
|}
 +
 +
=== <code>decelerationRate</code> ===
 +
عبارة عن عدد عشري يحدد معدل تباطؤ التمرير بعد رفع الإصبع عن عرض التمرير, كما يمكن استخدام اختصارات السلاسل النصية <code>normal</code> و <code>fast</code> والتي تقابل الإعدادات <code>UIScrollViewDecelerationRateNormal</code> و <code>UIScrollViewDecelerationRateFast</code> على منصة iOS.
 +
 +
* <code>normal</code> (الافتراضية) - وتوافق القيمة 0.998 على منصّة iOS والقيمة 0.985 على منصّة Android.
 +
* <code>fast</code> - وتوافق القيمة 0.99 على منصّة iOS والقيمة 0.9 على منصّة Android.
 +
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
|-
 +
|قيمة اسمية, عدد (enum('fast', 'normal'),number)
 +
|لا
 +
|}
 +
 +
=== <code>directionalLockEnabled</code> ===
 +
إذا كانت قيمتها <code>true</code> فإنها تسمح بالتمرير وفق الاتجاه العمودي أو الأفقي فقط أثناء السحب. وقيمتها الافتراضية <code>false</code>.
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
!المنصة
 +
|-
 +
|قيمة منطقية (bool)
 +
|لا
 +
|iOS
 +
|}
 +
 +
===<code>disableIntervalMomentum</code>===
 +
إذا كانت قيمتها <code>true</code> فإنها توقف عرض التمرير على الدليل (index) التالي (المتعلّق بموقع التمرير عند التحرير) بغض النظر عن سرعة الإيماءة. ويمكن أن تُستخدم للتصفّح الأفقي عندما يكون عرض الصفحة أصغر من عرض ScrollView. وقيمتها الافتراضية <code>false</code>.
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
|-
 +
|قيمة منطقية (bool)
 +
|لا
 +
|}
 +
 +
===<code>disableScrollViewPanResponder</code>===
 +
إذا كانت قيمتها <code>true</code> فإنها تلغي عمل المكوّن <code>[[ReactNative/panresponder|PanResponder]]</code> الافتراضي لعرض التمرير, ويُترك التحكم الكامل للّمسات داخل عرض التمرير للمكونات الأبناء. وهذا مفيد عمليًا عندما تكون الخاصيّة <code>snapToInterval</code> مفعّلة كونها لا تتبع أنمط اللمسات النموذجية. يجب تجنب هذه الخاصيّة في الاستخدامات الاعتيادية لعرض التمرير من دون الخاصيّة <code>snapToInterval</code>, لأنها قد تسبب حدوث لمسات غير متوقعة أثناء التمرير. وقيمتها الافتراضية <code>false</code>.
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
|-
 +
|قيمة منطقية (bool)
 +
|لا
 +
|}
 +
 +
===<code>endFillColor</code>===
 +
تُستخدم هذه الخاصيّة لملء الفراغ المتبقي في عرض التمرير والذي يحدث أحيانًا نتيجة أخذ عرض التمرير لحيز أكبر من الذي يشغله المحتوى, حيث تسمح هذه الخاصيّة بتجنب إعداد الخلفية. وتعد هذه الخاصيّة من التحسينات المتقدمة والتي لا تُستخدم في الحالات الاعتيادية. 
 +
{| class="wikitable"
 +
!النوع
 +
!مطلوب
 +
!المنصة
 +
|-
 +
|لون (<code>[https://reactnative.dev/docs/colors color]</code>)
 +
|لا
 +
|iOS
 +
|}
 +
 +
===<code>fadingEdgeLength</code>===

مراجعة 20:20، 11 ديسمبر 2020

ScrollView

هو عبارة عن مكوّن يغلّف المنصة ScrollView لتأمين التكامل مع منظومة مستجيب "responder" تعليق اللمس (touch locking).

يجب أن يكون ارتفاع المكوّن ScrollView محددًا (bounded) لكي يعمل, كونه سيضم مكونات أبناء غير محددة الارتفاع إلى حاوية محددة الارتفاع أثناء التمرير (scroll). وذلك بضبط ارتفاع العرض مباشرة بالخيار discouraged أو بالتأكد من أنه لجميع العروض الآباء ارتفاع محدد. يؤدي نسيان ضبط الالتفاف أسفل العرض على القيمة {flex: 1} إلى حدوث خطأ, يسارع مراقب (inspector) العناصر إلى تصحيحه (debug).

لا يدعم هذا المكوّن حتى الآن المستجيبات المضمّنة الأخرى لتعلّق عرض التمرير الحالي.

متى يُستخدم المكوّن FlatList بدل المكوّن <ScrollView>:

يعرض المكوّن ScrollView جميع مكونات react الأبناء دفعة واحدة, مما يؤثر سلبًا على الأداء عند عرض القوائم الطويلة التي تتطلب إنشاء الكثير من مكونات JS والعروض الأصيلة (native) ليتم إظهارها دفعة واحدة, وهذا بدوره يبطئ عملية الإظهار ويستهلك الكثير من الذاكرة.

في هذه الحالة يفضَّل استخدام المكون FlatList الذي لا يعرض المكونات المراد إظهارها إلا عند الوصول إليها, كما يقوم بإزالتها عند الانتهاء منها مما يوفر من قدرة المعالجة والذاكرة المستخدمة. كما يُستخدم هذا المكوّن عند الحاجة لإظهار فاصل بين العناصر أو بين الأعمدة المتعددة, أو لتمرير القوائم متناهية الطول وغيرها من الميزات الغير متوفرة في ScrollView.  

مثال

import React from 'react';
import { StyleSheet, Text, SafeAreaView, ScrollView } from 'react-native';
import Constants from 'expo-constants';

const App = () => {
  return (
    <SafeAreaView style={styles.container}>
      <ScrollView style={styles.scrollView}>
        <Text style={styles.text}>
          Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
          eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
          minim veniam, quis nostrud exercitation ullamco laboris nisi ut
          aliquip ex ea commodo consequat. Duis aute irure dolor in
          reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
          pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
          culpa qui officia deserunt mollit anim id est laborum.
        </Text>
      </ScrollView>
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    marginTop: Constants.statusBarHeight,
  },
  scrollView: {
    backgroundColor: 'pink',
    marginHorizontal: 20,
  },
  text: {
    fontSize: 42,
  },
});

export default App;

الخاصيّات (Props)

موروثة من الخاصيّات View Props.

alwaysBounceHorizontal

قيمتها الافتراضية horizontal={true} حيث تجعل عرض التمرير يرتد (bounce) أفقيًا عند وصوله للنهاية حتى ولو كان المحتوى أصغر من عرض التمرير نفسه.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

alwaysBounceVertical

قيمتها الافتراضية vertical={true} حيث تجعل عرض التمرير يرتد (bounce) عموديًا عند وصوله للنهاية حتى ولو كان المحتوى أصغر من عرض التمرير نفسه.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

automaticallyAdjustContentInset

تجعل منصّة iOS تتحكم آليًا بإدخال (inset) المحتوى من أجل عروض التمرير المتواجدة خلف شريط التنقل أو شريط الأدوات. وقيمتها الافتراضية true.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

bounces

قيمتها الافتراضية true حيث تجعل عرض التمرير يرتد عند وصوله لنهاية  المحتوى إن كان أكبر من عرض التمرير وفق محور التمرير. أما في حال كانت قيمتها false فإنها تلغي جميع أنواع الارتداد حتى لو كانت الخاصيات *alwaysBounce مفعّلة.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

bouncesZoom

قيمتها الافتراضية true حيث تتيح استخدام الإيماءات (gestures) لتجاوز الحد الأدنى والأقصى للتكبير, ويعود التكبير إلى حدوده الافتراضية بعد انتهاء الإيماءة.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

canCancelContentTouches

إذا كانت قيمتها false فإنها تمنع اللمسة المتحركة من السحب (drag). وقيمتها الافتراضية true.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

centerContent

إذا كانت قيمتها true فإنها تضع المحتوى آليًا في منتصف عرض التمرير إن كان المحتوى أصغر من حدود عرض التمرير, أما إن كان المحتوى أكبر من عرض التمرير فلا تأثير لهذه الخاصيّة. وقيمتها الافتراضية false.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

contentContainerStyle

وهي مجموعة من التنسيقات المطبّقة على محتوى عرض التمرير, والتي تغلّف جميع عروض المكونات الأبناء.

مثال:

return (
  <ScrollView contentContainerStyle={styles.contentContainer}>
  </ScrollView>
);
...
const styles = StyleSheet.create({
  contentContainer: {
    paddingVertical: 20
  }
});
النوع مطلوب
تنسيقات StyleSheetPropType(View Style props) لا

contentInset

تحدد مقدار دخول المحتوى من حواف عرض التمرير, وقيمتها الافتراضية {top: 0, left: 0, bottom: 0, right: 0}.

النوع مطلوب المنصة
كائن (object: {top: number, left: number, bottom: number, right: number}) لا iOS

contentInsetAdjustmentBehavior

تحدد هذه الخاصيّة طريقة استخدام منطقة الإدخال لتعديل منطقة المحتوى في عرض التمرير. والقيمة الافتراضية لها never, ومتوفرة فقط على منصة iOS إصدار 11 وما فوق.

النوع مطلوب المنصة
قيمة اسمية (enum('automatic', 'scrollableAxes', 'never', 'always')) لا iOS

contentOffset

تُستخدم لتحديد إزاحة بداية التمرير يدويًا, والقيمة الافتراضية لها {x: 0, y: 0}.

النوع مطلوب المنصة
PointPropType لا iOS

decelerationRate

عبارة عن عدد عشري يحدد معدل تباطؤ التمرير بعد رفع الإصبع عن عرض التمرير, كما يمكن استخدام اختصارات السلاسل النصية normal و fast والتي تقابل الإعدادات UIScrollViewDecelerationRateNormal و UIScrollViewDecelerationRateFast على منصة iOS.

  • normal (الافتراضية) - وتوافق القيمة 0.998 على منصّة iOS والقيمة 0.985 على منصّة Android.
  • fast - وتوافق القيمة 0.99 على منصّة iOS والقيمة 0.9 على منصّة Android.
النوع مطلوب
قيمة اسمية, عدد (enum('fast', 'normal'),number) لا

directionalLockEnabled

إذا كانت قيمتها true فإنها تسمح بالتمرير وفق الاتجاه العمودي أو الأفقي فقط أثناء السحب. وقيمتها الافتراضية false.

النوع مطلوب المنصة
قيمة منطقية (bool) لا iOS

disableIntervalMomentum

إذا كانت قيمتها true فإنها توقف عرض التمرير على الدليل (index) التالي (المتعلّق بموقع التمرير عند التحرير) بغض النظر عن سرعة الإيماءة. ويمكن أن تُستخدم للتصفّح الأفقي عندما يكون عرض الصفحة أصغر من عرض ScrollView. وقيمتها الافتراضية false.

النوع مطلوب
قيمة منطقية (bool) لا

disableScrollViewPanResponder

إذا كانت قيمتها true فإنها تلغي عمل المكوّن PanResponder الافتراضي لعرض التمرير, ويُترك التحكم الكامل للّمسات داخل عرض التمرير للمكونات الأبناء. وهذا مفيد عمليًا عندما تكون الخاصيّة snapToInterval مفعّلة كونها لا تتبع أنمط اللمسات النموذجية. يجب تجنب هذه الخاصيّة في الاستخدامات الاعتيادية لعرض التمرير من دون الخاصيّة snapToInterval, لأنها قد تسبب حدوث لمسات غير متوقعة أثناء التمرير. وقيمتها الافتراضية false.

النوع مطلوب
قيمة منطقية (bool) لا

endFillColor

تُستخدم هذه الخاصيّة لملء الفراغ المتبقي في عرض التمرير والذي يحدث أحيانًا نتيجة أخذ عرض التمرير لحيز أكبر من الذي يشغله المحتوى, حيث تسمح هذه الخاصيّة بتجنب إعداد الخلفية. وتعد هذه الخاصيّة من التحسينات المتقدمة والتي لا تُستخدم في الحالات الاعتيادية. 

النوع مطلوب المنصة
لون (color) لا iOS

fadingEdgeLength