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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں