قياس العروض الفرعية
استعلم عن أحجام العروض الفرعية أثناء التخطيط.
قياس العروض الفرعية درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
القياس يقود التخطيط
قبل أن تتمكن من وضع العناصر الفرعية، يجب أن تقيسها. تخطيط SwiftUI عملية تفاوض: يقترح العنصر الأب أحجامًا، وتستجيب العناصر الفرعية، ثم توفق بين الإجابات.
طلب حجم عنصر فرعي
يجيب كل وكيل في Subviews عن sizeThatFits(_:) وفقًا لـ ProposedViewSize معين. ويعيد الوكيل الحجم الذي سيشغله ذلك العنصر الفرعي وفقًا للاقتراح.
let size = subview.sizeThatFits(.unspecified)اقتراحات الاختبار الثلاثة
لمعرفة مرونة العنصر الفرعي، اختبره بثلاث طرق: يكشف .zero الحد الأدنى له، ويكشف .infinity الحد الأقصى، بينما يكشف .unspecified حجمه المثالي.
let minSize = subview.sizeThatFits(.zero)
let maxSize = subview.sizeThatFits(.infinity)
let ideal = subview.sizeThatFits(.unspecified)اقتراح عرض محدد
بالنسبة إلى النص الملتف، اقترح عرضًا محددًا واترك الارتفاع بقيمة nil. وسيبلغ العنصر الفرعي عن الارتفاع الذي يحتاج إليه عند ذلك العرض.
let proposal = ProposedViewSize(width: 200, height: nil)
let fit = subview.sizeThatFits(proposal)أولوية التخطيط
يكشف كل عرض فرعي عن priority (يُعيَّن بواسطة .layoutPriority). عندما تكون المساحة محدودة، امنحوا العناصر الفرعية ذات الأولوية الأعلى حجمها المثالي أولًا.
for subview in subviews {
let p = subview.priority
// distribute space to higher priority first
}قراءة القيم المخصصة
يمكن للعروض الفرعية حمل بيانات م typed عبر LayoutValueKey. يقرأ التخطيط subview[MyKey.self] للتأثير في التموضع، مثل تحديد تباعد خاص بكل عنصر.
private struct RankKey: LayoutValueKey {
static let defaultValue: Int = 0
}
let rank = subviews[0][RankKey.self]تعيين قيمة تخطيط
يعيّن العرض قيمة التخطيط باستخدام المُعدِّل layoutValue(key:value:)، مما يتيح للعناصر الفرعية تمرير تلميحات إلى التخطيط.
Text("Featured").layoutValue(key: RankKey.self, value: 10)التباعد بين العروض الفرعية
توفّر العروض الفرعية تفضيلات spacing. استخدموا subview.spacing.distance(to:along:) للحصول على الفجوة المقترحة بين عنصرين فرعيين متجاورين على امتداد محور.
let gap = subviews[0].spacing.distance(
to: subviews[1].spacing, along: .horizontal)تجميع الأحجام
يجمع التخطيط الأفقي عروض العناصر الفرعية ويأخذ ارتفاع العنصر الأطول. يتيح قياس جميع العناصر الفرعية أولًا حساب حجم الحاوية قبل وضع أي عنصر.
let sizes = subviews.map { $0.sizeThatFits(.unspecified) }
let totalWidth = sizes.reduce(0) { $0 + $1.width }
let maxHeight = sizes.map(\.height).max() ?? 0إعادة القياس أثناء التموضع
في placeSubviews يجب إعادة القياس (أو إعادة استخدام الأحجام المخزنة مؤقتًا) حتى تتطابق المواضع مع الحجم الذي أبلغتم عنه. القياسات استدعاءات وكيلة رخيصة، وليست عمليات تصيير فعلية.
func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
for s in subviews {
let size = s.sizeThatFits(.unspecified)
// use size to position s
_ = size
}
}مراعاة اقتراح العنصر الأب
احترموا دائمًا الاقتراح الذي تتلقونه. إذا اقترح العنصر الأب عرضًا ثابتًا، فرتّبوا العناصر الفرعية ضمنه؛ ولا تتجاوزوه بصمت، وإلا فسيقصّ التخطيط المحتوى.
let containerWidth = proposal.width ?? .infinityاختبار سريع: القياس
اختبروا مدى فهمكم لقياس العروض الفرعية.
خلاصة: قياس العروض الفرعية
القياس هو جوهر التخطيط المخصص. افحصوا العناصر الفرعية باستخدام .zero و.infinity و.unspecified لمعرفة الأحجام الدنيا والقصوى والمثالية، واقترحوا عروضًا محددة للمحتوى القابل للالتفاف، وراعوا أولوية التخطيط وتفضيلات التباعد.
تتيح قيم LayoutValueKey المخصصة للعناصر الفرعية تمرير التلميحات. أجروا القياس بالطريقة نفسها في كلتا الدالتين التابعتين للبروتوكول، حتى يتطابق الحجم المبلَّغ عنه مع التموضع دائمًا.
الأسئلة الشائعة
هل درس «قياس العروض الفرعية» مجاني؟
نعم — نص درس «قياس العروض الفرعية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «قياس العروض الفرعية»؟
استعلم عن أحجام العروض الفرعية أثناء التخطيط. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «قياس العروض الفرعية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.