NavigationView स्क्रीन के बीच स्टैक-आधारित नेविगेशन को व्यवस्थित करने के लिए SwiftUI का एक कंटेनर घटक है। NavigationView एक स्वचालित नेविगेशन बार, शीर्षक और «पीछे» बटन के साथ एक नेविगेशन स्टैक बनाता है। iOS 16 से, Apple NavigationStack का उपयोग करने की अनुशंसा करता है। Apple दस्तावेज़ में और पढ़ें।
मुख्य बिंदु
NavigationView एक SwiftUI कंटेनर है जो स्क्रीन के पदानुक्रम को लपेटता है और एक नेविगेशन इंटरफ़ेस प्रदान करता है। NavigationView के अंदर NavigationLink काम करता है — एक तत्व जिसे दबाने पर वर्तमान स्क्रीन को एक नई स्क्रीन से बदल दिया जाता है। NavigationView स्वचालित रूप से शीर्षक और «पीछे» बटन के साथ एक नेविगेशन बार जोड़ता है।
NavigationView SwiftUI के साथ iOS 13 में दिखाई दिया। अवधारणात्मक रूप से, यह UIKit से UINavigationController को बदलता है, लेकिन घोषणात्मक रूप से कार्यान्वित किया गया है। मैन्युअल push/pop के बजाय, डेवलपर NavigationLink के माध्यम से स्क्रीन के बीच संबंध का वर्णन करता है। सिस्टम स्वचालित रूप से स्टैक का प्रबंधन करता है।
NavigationView मॉडिफ़ायर .navigationTitle, .navigationBarTitleDisplayMode, .toolbar और .searchable का समर्थन करता है। iOS 16+ के लिए, Apple ने NavigationStack पेश किया, जो NavigationView API को संरक्षित करता है लेकिन NavigationPath के माध्यम से प्रोग्रामेटिक स्टैक प्रबंधन जोड़ता है। iOS 15 और उससे नीचे का समर्थन करने वाली परियोजनाओं के लिए, NavigationView एकमात्र विकल्प बना हुआ है।
NavigationLink एक SwiftUI तत्व है जो NavigationView या NavigationStack के अंदर लक्ष्य स्क्रीन पर संक्रमण बनाता है। NavigationLink दबाने पर, सिस्टम लक्ष्य स्क्रीन को नेविगेशन स्टैक में जोड़ता है। संक्रमण एनिमेशन iOS पर दाईं ओर से मानक push है, जो प्लेटफ़ॉर्म के अनुकूल होता है।
struct ContentView: View {
var body: some View {
NavigationView {
List(items) { item in
NavigationLink(destination: DetailView(item: item)) {
Text(item.title)
}
}
.navigationTitle("सूची")
}
}
}
struct DetailView: View {
let item: Item
var body: some View {
VStack {
Text(item.description)
.navigationTitle(item.title)
.navigationBarTitleDisplayMode(.inline)
}
}
}NavigationLink दो पैरामीटर लेता है: destination — लक्ष्य View, और label — वह तत्व जिसे उपयोगकर्ता दबाता है। सूचियों के लिए, value और NavigationLink(value:) के साथ सिंटैक्स सुविधाजनक है — यह स्वचालित रूप से सेल को अचयनित करता है और NavigationPath के साथ काम करता है।
iOS 16 के साथ, Apple ने NavigationView के प्रतिस्थापन के रूप में NavigationStack पेश किया। NavigationStack घोषणात्मक सिंटैक्स को संरक्षित करता है लेकिन एक अत्यंत महत्वपूर्ण सुविधा जोड़ता है — NavigationPath प्रकार या Hashable की सरणी के path गुण के माध्यम से प्रोग्रामेटिक स्टैक प्रबंधन।
| सुविधा | NavigationView (iOS 13-15) | NavigationStack (iOS 16+) |
|---|---|---|
| प्रोग्रामेटिक push | नहीं, केवल NavigationLink के माध्यम से | हाँ, path.append(value) के माध्यम से |
| popToRoot | केवल रूट तक dismiss | path.removeLast(path.count) |
| डीप लिंक | जटिल कार्यान्वयन | path के माध्यम से अंतर्निहित समर्थन |
| स्टैक टाइपिंग | नहीं (destination में कोई भी View) | हाँ (Hashable मानों की सरणी) |
| iPad SplitView | ColumnStyle / StackStyle | NavigationSplitView (iOS 16+) |
न्यूनतम संस्करण iOS 16+ वाली परियोजनाओं के लिए, NavigationStack का उपयोग करें। iOS 14-15 समर्थन के लिए — NavigationView। NavigationStack के पुराने संस्करणों के लिए कोई सीधा एनालॉग नहीं है, इसलिए अपग्रेड के लिए संगतता जाँच की आवश्यकता होती है।
.toolbar और .navigationTitle मॉडिफ़ायर नेविगेशन बार की सामग्री को नियंत्रित करते हैं। .navigationTitle स्क्रीन का शीर्षक सेट करता है, .navigationBarTitleDisplayMode शैली चुनता है: .large (बड़ा, डिफ़ॉल्ट) या .inline (कॉम्पैक्ट, सेटिंग्स की तरह)। .toolbar बटन, खोज और खंडित नियंत्रण जोड़ता है।
struct SettingsView: View {
var body: some View {
NavigationStack {
Form {
Section("प्रोफ़ाइल") {
Text("उपयोगकर्ता नाम")
Toggle("सूचनाएँ", isOn: $notifications)
}
}
.navigationTitle("सेटिंग्स")
.navigationBarTitleDisplayMode(.large)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button("सहेजें") { save() }
}
ToolbarItem(placement: .navigationBarLeading) {
EditButton()
}
}
}
}
}.searchable एक और मॉडिफ़ायर है जो नेविगेशन बार में खोज बार को एकीकृत करता है। NavigationView और NavigationStack दोनों के साथ काम करता है। स्क्रॉल करते समय खोज स्वचालित रूप से छिप जाती है और नीचे स्वाइप करने पर दिखाई देती है। Binding String के माध्यम से सूची फ़िल्टरिंग का समर्थन करता है।
NavigationPath एक iOS 16+ प्रकार है जो नेविगेशन स्टैक को Hashable मानों के संग्रह के रूप में दर्शाता है। डेवलपर प्रोग्रामेटिक संक्रमण के लिए path में तत्व जोड़ता है, वापस लौटने के लिए हटाता है। NavigationPath डीप लिंक, push सूचनाएँ और स्थिति बहाली का समर्थन करता है।
struct AppNavigation: View {
@State private var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
List(categories) { category in
NavigationLink("श्रेणी \(category.name)",
value: category)
}
.navigationTitle("श्रेणियाँ")
.navigationDestination(for: Category.self) { category in
ProductListView(category: category)
}
.navigationDestination(for: Product.self) { product in
ProductDetailView(product: product)
}
}
// डीप लिंक द्वारा प्रोग्रामेटिक संक्रमण
.onOpenURL { url in
guard let productId = DeepLinkParser.parse(url) else { return }
path.append(Product(id: productId))
}
}
}.navigationDestination(for:) एक डेटा प्रकार पंजीकृत करता है जिसके लिए स्क्रीन दिखानी है। जब इस प्रकार का मान path में जोड़ा जाता है, तो सिस्टम स्वचालित रूप से लक्ष्य View बनाता है। यह दृष्टिकोण स्पष्ट NavigationLink(destination:) को बदलता है और नेविगेशन को सख्ती से टाइप किया हुआ बनाता है।
NavigationView और NavigationStack सभी Apple प्लेटफ़ॉर्म पर काम करते हैं: iOS, iPadOS, watchOS, tvOS और macOS। व्यवहार स्क्रीन के अनुकूल होता है। iPad पर, NavigationStack NavigationSplitView का समर्थन करता है, जो UIKit से UISplitViewController को बदलता है और चौड़ी स्क्रीन पर दो कॉलम प्रदर्शित करता है।
NavigationSplitView (iOS 16+) स्क्रीन को साइडबार (सूची) और विवरण में विभाजित करता है। iPhone पर, साइडबार छिपा होता है, केवल NavigationLink के माध्यम से विवरण दिखाता है। iPad पर, साइडबार और विवरण विभाजन मोड में एक साथ प्रदर्शित होते हैं।
struct AdaptiveNavigation: View {
@State private var selectedCategory: Category?
var body: some View {
NavigationSplitView {
List(categories, selection: $selectedCategory) { category in
Text(category.name)
}
.navigationTitle("श्रेणियाँ")
} detail: {
ProductListView(category: selectedCategory)
}
}
}NavigationSplitView प्रत्येक डिवाइस के लिए स्वचालित रूप से इष्टतम प्रदर्शन मोड चुनता है। पोर्ट्रेट में iPhone पर — स्टैक, लैंडस्केप में iPad और iPhone पर — विभाजन। डेवलपर को विभिन्न आकार वर्गों के लिए अलग कोड लिखने की आवश्यकता नहीं है।
अक्सर पूछे जाने वाले प्रश्न
NavigationView पुराना API है (iOS 13-15), केवल घोषणात्मक NavigationLink का समर्थन करता है। NavigationStack नया API है (iOS 16+), प्रोग्रामेटिक नेविगेशन, डीप लिंक और सख्ती से टाइप किए गए स्टैक के लिए path जोड़ता है। Apple नई परियोजनाओं के लिए NavigationStack की अनुशंसा करता है।
.toolbar मॉडिफ़ायर के माध्यम से ToolbarItem के साथ। उदाहरण: .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button('सेटिंग्स') { } } }. Placement स्थिति निर्धारित करता है: trailing (दाएँ), leading (बाएँ), principal (केंद्र)।
शीर्षक .navigationTitle('शीर्षक') के माध्यम से सेट किया जाता है। शैली — .navigationBarTitleDisplayMode(.large) या .inline। Large — iOS Music शैली में बड़ा शीर्षक, inline — कॉम्पैक्ट, सेटिंग्स की तरह। शैली को प्रत्येक स्क्रीन के लिए अलग-अलग बदला जा सकता है।
तीन तरीके: value के माध्यम से (NavigationLink(value:item) { Label }, iOS 16+), destination + label के माध्यम से, प्रोग्रामेटिक संक्रमण के लिए isActive के माध्यम से। value के साथ NavigationLink सूचियों के लिए साफ़ है क्योंकि इसे संक्रमण से पहले लक्ष्य View बनाने की आवश्यकता नहीं होती है।
हाँ। NavigationView और NavigationStack iOS, iPadOS, watchOS, tvOS और macOS पर उपलब्ध हैं। watchOS पर नेविगेशन Digital Crown के साथ इंटरफ़ेस पदानुक्रम का उपयोग करता है, tvOS पर — रिमोट के साथ फ़ोकस-आधारित इनपुट। व्यवहार स्वचालित रूप से प्लेटफ़ॉर्म के अनुकूल हो जाता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें