परिचय: Navigation Bar को छिपाना शुरुआती के लिए दर्द क्यों है?
\n\nक्या आपने कभी ऐसी स्थिति का सामना किया है: आप एक ऐप बना रहे हैं, पहली स्क्रीन को फुल-स्क्रीन लैंडिंग पेज जैसा दिखना चाहिए, बिना ऊपर ग्रे पट्टी के, जबकि दूसरी स्क्रीन पर नेविगेशन के लिए Navigation Bar की आवश्यकता है? यह तार्किक लगता है कि viewDidLoad में बस navigationController?.isNavigationBarHidden = true लिख दें। लेकिन फिर जादू शुरू होता है: दूसरी स्क्रीन से वापस आने पर Navigation Bar वापस 'आ सकता है', एनिमेशन टूट जाता है, या यह बिल्कुल छिपता ही नहीं है।
यह Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है (विषय 'Swift में पहले ViewController से navigation bar कैसे छिपाएं?' ने हजारों बार देखा गया है)। इस ट्यूटोरियल में, हम न केवल मूल समाधान को समझेंगे, बल्कि बारीक बिंदुओं पर भी चर्चा करेंगे: इसे एनिमेशन बग के बिना खूबसूरती से कैसे करें, और इसे आधुनिक iOS मानकों के अनुसार कैसे अनुकूलित करें। यदि आप Swift में पहली स्क्रीन पर navigation bar छिपाने का एक विश्वसनीय तरीका ढूंढ रहे हैं, तो आप सही जगह पर हैं।
\n\nसमस्या: 'हुड के नीचे' क्या होता है?
\n\nजब आप UINavigationController का उपयोग करते हैं, तो यह सभी चाइल्ड कंट्रोलर्स के लिए Navigation Bar का प्रबंधन करता है। यदि आप इसे पहले ViewController के viewDidLoad में छिपाते हैं, तो दूसरी स्क्रीन पर जाने और वापस आने पर यह प्रॉपर्टी रीसेट हो सकती है। क्यों?
- \n
- viewDidLoad केवल एक बार कॉल होता है — स्क्रीन के दोबारा दिखने पर कोड निष्पादित नहीं होगा। \n
- UINavigationController bar को सिंक्रोनाइज़ करता है स्टैक में अंतिम कंट्रोलर के आधार पर। \n
- ट्रांज़िशन एनिमेशन स्थिति को 'खराब' कर सकता है यदि
animatedपैरामीटर सेट नहीं किए गए हैं। \n
लेकिन चिंता न करें — समाधान सुरुचिपूर्ण और सरल है। आइए कोड लिखें।
\n\nमूल समाधान: पहले ViewController में Navigation Bar छिपाना
\n\nसबसे सीधा तरीका viewWillAppear मेथड को ओवरराइड करना है। यहाँ क्यों? क्योंकि यह मेथड viewDidLoad के विपरीत, स्क्रीन के दिखने से पहले हर बार कॉल होता है। इस प्रकार, दूसरी स्क्रीन से वापस आने के बाद भी Navigation Bar फिर से छिप जाएगा।
चरण 1: पहला ViewController बनाएं
\n\nमान लीजिए आपके पास FirstViewController है, जो UINavigationController में रूट है।
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ध्यान दें: हम animated पैरामीटर के साथ setNavigationBarHidden(_:animated:) का उपयोग कर रहे हैं। यदि true पास किया जाता है, तो Navigation Bar ट्रांज़िशन के साथ सिंक्रोनाइज़्ड एनिमेशन के साथ छिपेगा/दिखेगा। यह पेशेवर दिखता है।
चरण 2: दूसरी स्क्रीन सेट करें
\n\nदूसरी स्क्रीन (SecondViewController) पर, Navigation Bar डिफ़ॉल्ट रूप से दिखाई देगा। कुछ अतिरिक्त लिखने की आवश्यकता नहीं है — यह ट्रांज़िशन पर स्वचालित रूप से दिखाई देगा।
चरण 3: Interface Builder या कोड में जाँच करें
\n\nसुनिश्चित करें कि आपका UINavigationController सही ढंग से कॉन्फ़िगर किया गया है। यदि आप Storyboard का उपयोग कर रहे हैं, तो जाँचें कि पहली स्क्रीन FirstViewController है। यदि कोड में:
let navController = UINavigationController(rootViewController: FirstViewController())\n\nहो गया! ऐप चलाएं — पहली स्क्रीन बिना Navigation Bar के होगी, दूसरी इसके साथ होगी।
\n\nउन्नत तकनीकें: एनिमेशन और SwiftUI
\n\nमूल समाधान काम करता है, लेकिन वास्तविक पर