React Native / الأوصاف الأصلية والتفاعل المحلي / الدرس 3
التنسيق وFlexbox والمساحة المتاحة
تتبّع توزيع التخطيط الأصلي والاتجاه المنطقي ونمو النص، قبل إضافة أبعاد ثابتة إلى شاشة لا تعمل كما ينبغي.
في هذه الصفحة
أهداف الدرس
- يتبع تنسيق React Native عقد تخطيط أصليا
- وزّع عرض الصف المتبقي عن قصد
- استجب للمساحة التي يتلقاها المكوّن فعليا
يتبع تنسيق React Native عقد تخطيط أصليا
تستخدم خصائص التنسيق كائنات JavaScript بأسماء camelCase، بدلا من أوراق تنسيق المتصفح. تصف الأبعاد العددية عادة وحدات تخطيط منطقية، ولا تضمن عددا معينا من بكسلات الشاشة الفعلية. ولـ Flexbox في React Native قيم افتراضية تختلف عن الويب، منها أن الاتجاه الرئيسي column وأن flexShrink يساوي صفرا افتراضيا. اقرأ اتجاه الحاوية المختارة قبل تفسير المحاذاة أو التجاوز. ليس العرض الثابت حلا عاما لتسمية طويلة. حدّد السلف الذي يوفر عرضا وارتفاعا قابلين للاستخدام، ثم قرّر أي ابن ينمو أو ينكمش أو يلتف أو يتمرر.
وزّع عرض الصف المتبقي عن قصد
تضع الوحدة الأولى كتلة زخرفية صغيرة بجانب تسمية نصية. يمنح التوزيع المرن النص عرض الصف المحدود المتبقي. واختيار numberOfLines=2 قرار للمنتج لاختصار النص بعد سطرين، وليس إصلاحا إلزاميا لكل تجاوز. إذا كان النص الكامل ضروريا، فاسمح بالنمو الرأسي أو قدم تفاصيل بمعلومة ميسرة مكافئة. تجمع StyleSheet.create كائنات تنسيق مسماة وقد تساعد الفحص الساكن، لكنها لا تثبت التباين أو التجاوب أو الأداء. اختبر النص المترجم والمكبر فعليا، لا التسمية المصطنعة القصيرة وحدها.
import {View, Text, StyleSheet} from 'react-native';
const styles = StyleSheet.create({
row: {flexDirection: 'row', alignItems: 'center', padding: 16},
mark: {width: 20, height: 20, backgroundColor: 'teal', marginEnd: 8},
label: {flex: 1, flexShrink: 1},
});
export default function App() {
return <View style={styles.row}>
<View style={styles.mark} />
<Text style={styles.label} numberOfLines={2}>Riverside reading workshop</Text>
</View>;
}
The label uses the remaining row width and is limited to two lines.
يجب أن توفر البيئة عرض صف محدودا. الالتفاف الدقيق ومقاييس الخط الأصلي توقعات مستنتجة، وليست نتائج عرض مسجلة.
استجب للمساحة التي يتلقاها المكوّن فعليا
تستخدم الوحدة الثانية useWindowDimensions التي تتحدث عند تغير معلومات النافذة. تختار نقطة التحول التوضيحية صفا أو عمودا من عرض النافذة الحالي. وقد تتلقى بطاقة متداخلة عرضا أقل من النافذة، فيكون قياس تخطيطها نفسه المدخل الصحيح. اختر نقاط التحول من متطلبات المحتوى، لا من تصنيف عام للهاتف واللوحي. قد يغير الدوران وتقسيم الشاشة ولوحة المفاتيح وحجم الخط المساحة المفيدة خلال جلسة واحدة. احفظ ترتيب القراءة ومعنى التركيز عند إعادة التنظيم. ولا يثبت فرع متجاوب اختبار كل إعداد للهدف.
import {View, Text, useWindowDimensions} from 'react-native';
export default function App() {
const {width} = useWindowDimensions();
const wide = width >= 600;
return <View style={{flexDirection: wide ? 'row' : 'column', padding: 16}}>
<Text style={{flex: 1}}>Workshop overview</Text>
<Text style={{flex: 1}}>Reading materials</Text>
</View>;
}
Widths below600 choose a column; widths at least600 choose a row.
عتبة 600 وحدة مثال لهذا التركيب، وليست توصية عامة للتخطيط المتكيف.
استخدم الحواف المنطقية وحدّد مالك التمرير
يدعم التباعد المنطقي عند البداية والنهاية تخطيطا يراعي اتجاه القراءة، بينما تصف قيم اليسار واليمين المطلقة جوانب مادية. راجع معناها في العربية، بدلا من عكس كل أيقونة أو تحويل عميانا. يحتاج ScrollView إلى مساحة عرض محدودة وينشئ أبناءه مسبقا، بينما يعالج FlatList المجموعات المتكررة الأكبر من خلال العرض الافتراضي. قد ينشئ تداخل عدة حاويات تمرير لإسكات عرض واحد إيماءات متنافسة أو تخطيطا غير محدود. قرّر هل يبقى العنوان ثابتا، وأي منطقة تملك التمرير. تنتمي معالجة المنطقة الآمنة إلى تكامل التطبيق المختار؛ فلا تفترض أن View عادية بحشو تحسب كل هوامش النظام.
افحص الحالات القصوى للمحتوى قبل إعلان صحة التخطيط
راجع نافذة ضيقة، وتكبيرا كبيرا للخط، ونصا عربيا طويلا، ومعرّفات مختلطة، ومحتوى فارغا، ونماذج مع لوحة مفاتيح ظاهرة. تحقّق من بقاء النص الأساسي متاحا والإجراءات الرئيسية قابلة للوصول. لا تعطل تكبير الخط لمجرد حفظ أبعاد نموذج بصري. احفظ أول عرض تخطيط أصلي ذي صلة وشجرة مصغرة عند الإبلاغ عن عيب. تستطيع مراجعة المصدر شرح التوزيع المقصود، لكن القص الفعلي ومناطق اللمس وترتيب الإتاحة تحتاج إلى بيئة الهدف المتوافقة. لا يجري في بيئة الدورة تحقق بمحرك تخطيط أو صورة أو محاكي أو جهاز.
الأخطاء الشائعة وإصلاحها
دفع تسمية صف طويلة للتحكم خارج الشاشة
- لماذا يحدث؟
- لا يملك الصف عقدا مناسبا لتوزيع العرض أو نمو النص.
- كيف تصلحه؟
- وزع مساحة النص عمدا، واختر الالتفاف أو اختصارا مبررا.
- كيف تتجنب تكراره؟
- اختبر الترجمات الطويلة عند عرض ضيق.
استخدام لوحة متداخلة عرضا متجاوبا خاطئا
- لماذا يحدث؟
- اعتُبر عرض النافذة مساحة اللوحة الفعلية.
- كيف تصلحه؟
- قِس حد المكوّن المعني عند الحاجة.
- كيف تتجنب تكراره؟
- أدرج التخطيطات المنقسمة والمتداخلة في المراجعة.
بقاء الحشو العربي عند الحافة غير المقصودة
- لماذا يحدث؟
- استُخدمت جوانب مادية لمعنى يتبع القراءة.
- كيف تصلحه؟
- استخدم البداية والنهاية المنطقيتين حيث يتطلب التصميم.
- كيف تتجنب تكراره؟
- راجع الاتجاهين بنص مختلط.
اختبر فهمك
1. لماذا لا تكفي نقطة تحول 600 وحدة لكل بطاقة في نافذة واسعة؟
اعرض الحل المشروح
قد تشغل البطاقة عمودا ضيقا حتى عندما تكون النافذة واسعة. ينبغي أن يستجيب تخطيطها لعرض المكوّن المتاح ومتطلبات المحتوى. استخدم أبعاد النافذة للقرارات على مستوى النافذة، وقياسا محليا عندما يكون حد المكوّن أضيق.
2. هل ينبغي لكل عنوان أساسي استخدام numberOfLines لإزالة التجاوز؟
اعرض الحل المشروح
لا. قد يخفي الاختصار معلومات يحتاجها المستخدم. قرّر هل يستطيع العنوان النمو أو الالتفاف أو الانتقال إلى ترتيب آخر أو تقديم عرض تفاصيل كامل. تحقّق من بقاء تسمية الإتاحة والإجراء مفيدين؛ فالعنوان المقصوص المرتب بصريا وحده لا يثبت صحة المهمة.
أهم ما تعلمته
- يتبع تنسيق React Native عقد تخطيط أصليا
- افحص الحالات القصوى للمحتوى قبل إعلان صحة التخطيط