كيفية إخفاء شريط التنقل في الشاشة الأولى في Swift: دليل كامل

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

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

ابدأ الدورة

مقدمة: لماذا يعتبر إخفاء Navigation Bar ألماً للمبتدئين؟

\n\n

هل سبق لك أن واجهت موقفاً: تقوم بإنشاء تطبيق، ويجب أن تبدو الشاشة الأولى كصفحة هبوط بملء الشاشة، بدون شريط رمادي في الأعلى، بينما تحتاج الشاشة الثانية إلى Navigation Bar للملاحة؟ قد يبدو من المنطقي ببساطة كتابة navigationController?.isNavigationBarHidden = true في viewDidLoad. ولكن هنا يبدأ السحر: قد يظهر Navigation Bar مرة أخرى عند العودة من شاشة أخرى، أو تتعطل الرسوم المتحركة، أو لا يتم إخفاؤه على الإطلاق.

\n\n

هذا أحد أكثر الأسئلة شيوعاً على Stack Overflow (موضوع «How to hide a navigation bar from first ViewController in Swift?» حصل على آلاف المشاهدات). في هذا البرنامج التعليمي، سنشرح ليس فقط الحل الأساسي، ولكن أيضاً النقاط الدقيقة: كيفية القيام بذلك بشكل أنيق، بدون أخطاء في الرسوم المتحركة، وكيفية التكيف مع معايير iOS الحديثة. إذا كنت تبحث عن طريقة موثوقة لإخفاء navigation bar على الشاشة الأولى في Swift — فأنت في المكان الصحيح.

\n\n

المشكلة: ماذا يحدث «تحت الغطاء»؟

\n\n

عند استخدام UINavigationController، فإنه يدير Navigation Bar لجميع وحدات التحكم التابعة. إذا قمت ببساطة بإخفائه في viewDidLoad لوحدة التحكم الأولى، عند الانتقال إلى الشاشة الثانية والعودة، قد يتم إعادة تعيين الخاصية. لماذا؟

\n\n
    \n
  • viewDidLoad يُستدعى مرة واحدة — عند إعادة عرض الشاشة، لن يتم تنفيذ الكود.
  • \n
  • UINavigationController يقوم بمزامنة bar بناءً على آخر وحدة تحكم في المكدس.
  • \n
  • قد تؤدي رسوم الانتقال إلى «ابتلاع» الحالة إذا لم يتم تعيين معاملات animated.
  • \n
\n\n

لكن لا تقلق — الحل أنيق وبسيط. دعنا نكتب الكود.

\n\n

الحل الأساسي: إخفاء Navigation Bar في ViewController الأول

\n\n

الطريقة الأكثر مباشرة هي إعادة تعريف طريقة viewWillAppear. لماذا هنا؟ لأن هذه الطريقة تُستدعى في كل مرة قبل ظهور الشاشة، على عكس viewDidLoad. بهذه الطريقة، حتى بعد العودة من شاشة أخرى، سيتم إخفاء Navigation Bar مرة أخرى.

\n\n

الخطوة 1: إنشاء ViewController الأول

\n\n

لنفترض أن لديك FirstViewController، وهو الجذر في UINavigationController.

\n\n
import UIKit\n\nclass FirstViewController: UIViewController {\n\n    override func viewWillAppear(_ animated: Bool) {\n        super.viewWillAppear(animated)\n        // إخفاء Navigation Bar بدون رسوم متحركة\n        navigationController?.setNavigationBarHidden(true, animated: animated)\n    }\n\n    override func viewWillDisappear(_ animated: Bool) {\n        super.viewWillDisappear(animated)\n        // إظهار Navigation Bar عند مغادرة الشاشة\n        navigationController?.setNavigationBarHidden(false, animated: animated)\n    }\n}
\n\n

لاحظ: نستخدم setNavigationBarHidden(_:animated:) مع المعامل animated. إذا قمت بتمرير true، سيتم إخفاء/إظهار Navigation Bar مع رسوم متحركة متزامنة مع الانتقال. هذا يبدو احترافياً.

\n\n

الخطوة 2: إعداد الشاشة الثانية

\n\n

في الشاشة الثانية (SecondViewController)، سيتم عرض Navigation Bar بشكل افتراضي. لا حاجة لكتابة أي شيء إضافي — سيظهر تلقائياً عند الانتقال.

\n\n

الخطوة 3: التحقق في Interface Builder أو الكود

\n\n

تأكد من أن UINavigationController الخاص بك مُعد بشكل صحيح. إذا كنت تستخدم Storyboard، تحقق من أن الشاشة الأولى هي FirstViewController. إذا كان في الكود:

\n\n
let navController = UINavigationController(rootViewController: FirstViewController())
\n\n

تم! قم بتشغيل التطبيق — ستكون الشاشة الأولى بدون Navigation Bar، والثانية معه.

\n\n

تقنيات متقدمة: الرسوم المتحركة و SwiftUI

\n\n

الحل الأساسي يعمل، ولكن في التطبيقات الحقيقية

المدونات

توصيات الكتب