كيفية تغيير لون الخلفية في SwiftUI: أفضل الممارسات لعام 2025

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا تعتبر مسألة الخلفية في SwiftUI فخًا للمبتدئين؟

\n\n

إذا كنت قد تساءلت يومًا "How do I change the background color of a SwiftUI View?" — فأنت لست وحدك. هذا الاستعلام على Stack Overflow حصد آلاف المشاهدات. للوهلة الأولى، تبدو المهمة تافهة: تستخدم .background() وينتهي الأمر. لكن عمليًا، يواجه المطورون (خاصة المنتقلون من UIKit) مشكلات غير متوقعة: الخلفية لا تملأ الشاشة بالكامل، ظهور خطوط بيضاء في منطقة Safe Area، أو أن المُعدِّل لا يعمل كما هو متوقع.

\n\n

في عام 2025، مع إصدار الإصدارات الجديدة من SwiftUI (iOS 18, macOS 15)، ظهرت حلول أكثر أناقة. في هذه المقالة، سنستعرض جميع طرق تغيير لون الخلفية في SwiftUI، من الطرق الكلاسيكية إلى الحديثة، وسنكشف عن أفضل الممارسات التي ستوفر لك ساعات من التصحيح.

\n\n

1. الطريقة الأسهل: المُعدِّل .background()

\n\n

هذا أول ما يتبادر إلى الذهن. ببساطة تضيف .background(Color.blue) إلى VStack أو Text. وهذا يعمل... حتى تحتاج إلى ملء الشاشة بالخلفية.

\n\n
struct ContentView: View {\n    var body: some View {\n        VStack {\n            Text("مرحبًا، SwiftUI!")\n                .font(.largeTitle)\n        }\n        .background(Color.blue)\n    }\n}\n
\n\n

المشكلة: هذا الكود سيلون فقط المنطقة التي يشغلها VStack. إذا كان النص قليلًا، ستكون الخلفية مستطيلًا صغيرًا. إذا أضفت .frame(maxWidth: .infinity, maxHeight: .infinity) — فستمتد، لكنها ستظل تصطدم بـ Safe Area، تاركة خطوطًا بيضاء في الأعلى والأسفل.

\n\n

النسخة الموسعة مع ignoresSafeArea

\n\n

لإصلاح ذلك، يجب أن نحدد بوضوح أن الخلفية يجب أن تتجاهل المناطق الآمنة:

\n\n
struct ContentView: View {\n    var body: some View {\n        VStack {\n            Text("خلفية ملء الشاشة")\n                .font(.largeTitle)\n        }\n        .frame(maxWidth: .infinity, maxHeight: .infinity)\n        .background(Color.blue)\n        .ignoresSafeArea()\n    }\n}\n
\n\n

الآن تملأ الخلفية الشاشة بالكامل، بما في ذلك المنطقة أسفل شريط الحالة ومؤشر الصفحة الرئيسية. هام: يجب أن يأتي المُعدِّل .ignoresSafeArea() بعد .background()، وإلا فلن يعمل بشكل صحيح.

\n\n

2. النهج الاحترافي: ZStack مع Color

\n\n

الطريقة الأكثر شيوعًا والموصى بها بين مطوري SwiftUI ذوي الخبرة — هي استخدام ZStack، حيث تكون الطبقة الأولى هي Color، وفوقها المحتوى الخاص بك.

\n\n
struct ContentView: View {\n    var body: some View {\n        ZStack {\n            Color.blue\n                .ignoresSafeArea() // املأ كل شيء\n\n            VStack {\n                Text("محتوى فوق الخلفية")\n                    .font(.largeTitle)\n                    .foregroundColor(.white)\n            }\n        }\n    }\n}\n
\n\n

لماذا تعتبر هذه أفضل ممارسة؟

\n
    \n
  • نظافة الكود: تفصل بوضوح الخلفية عن المحتوى.
  • \n
  • المرونة: من السهل إضافة تدرج أو صورة بدلاً من لون ثابت.
  • \n
  • قابلية التوقع: Color هي View تشغل كل المساحة المتاحة، لذا يعمل .ignoresSafeArea() بشكل مثالي.
  • \n
\n\n

استخدام LinearGradient

\n\n

في عام 2025، التدرجات هي المعيار الفعلي. إنشاء خلفية جميلة سهل جدًا:

\n\n
ZStack {\n    LinearGradient(\n        colors: [.blue, .purple],\n        startPoint: .top,\n        endPoint: .bottom\n    )\n    .ignoresSafeArea()\n\n    // المحتوى الخاص بك\n}\n
\n\n

3. النهج الجديد في iOS 17+: المُعدِّل .containerBackground()

\n\n

مع إصدار iOS 17، قدمت Apple مُعدِّلاً جديدًا هو .containerBackground().

المدونات

توصيات الكتب