Push Presentation, mobil uygulamalarda her yeni ekranın önceki ekranın üzerine navigasyon yığınına eklendiği bir navigasyon modelidir. Kullanıcı, içerikte sırayla ilerleyebilir ve sistem düğmesi veya kaydırma hareketiyle geri dönebilir. Apple Developer, 2025'e göre, UINavigationController iOS uygulamalarının %85'inde ana navigasyon modeli olarak kullanılmaktadır. Android'de benzer işlevsellik, FragmentManager ve Navigation Component'ten NavController aracılığıyla uygulanır.
Önemli Noktalar
Push Presentation, yeni ekranın yığının tepesine yerleştirildiği, önceki ekranın ise altında bellekte kaldığı bir navigasyon mekanizmasıdır. Kullanıcı, sırayla detay ekranlarını açarak içeriğin derinliklerine iner ve geri düğmesi onu önceki adıma döndürür.
Push navigasyonunun mimarisi, LIFO (Last In, First Out) veri yapısına dayanır. Yeni bir ekran her zaman yığının sonuna eklenir ve silme yalnızca tepeden gerçekleşir. Bu, öngörülebilir davranışı garanti eder: kullanıcı, geri düğmesinin onu tam olarak bir adım geri götüreceğini her zaman bilir. Navigasyon yığını, uygulama karmaşıklığına bağlı olarak 2 ila 10+ ekran içerebilir.
Push Presentation, hiyerarşik içeriğe sahip uygulamalarda ana modeldir: haber akışları, ürün katalogları, çok seviyeli menüler ve dokümantasyon. Material Design'a göre, yığın navigasyonu, kullanıcının içeriği genelden özele keşfettiği ve her sonraki ekranın konu anlayışını derinleştirdiği senaryolar için uygundur.
Navigasyon yığını, her öğenin kendi ViewController veya Fragment'inin durumunu sakladığı sıralı bir ekran kümesidir. Push işlemi sırasında, yeni bir ekran yığına eklenir, görünümü animasyonlu hale getirilir (iOS'ta sağdan kaydırma, Android'de aşağıdan kaydırma veya Fade) ve aktif hale gelir.
Pop işlemi sırasında (geri düğmesine basma), üst ekran yığından kaldırılır, yok edilir veya belleğe taşınır ve önceki ekran aktif hale gelir. iOS varsayılan olarak çıkarılan ViewController'ı yok ederek belleği serbest bırakır. Android, Fragment'i yeniden oluşturmadan geri yükleme imkanı ile geri yığınında saklayabilir.
Yığın derinliği performansı etkiler: yığındaki her ekran bellek tüketir. Tavsiye edilir: yığında 10'dan fazla ekran tutmayın. Derin navigasyon için PopToRoot kullanın veya yeni bir kök ekranla yığını yeniden başlatın. Android'de Navigation Component, SavedStateHandle aracılığıyla yığın durumunu otomatik olarak yönetir.
UINavigationController, bir UIViewController yığınını yöneten bir iOS kapsayıcı denetleyicisidir. Geçerli ekranın başlığı ve bir geri düğmesi ile otomatik olarak bir navigasyon çubuğu görüntüler. Varsayılan push animasyonu, kullanıcıda içeriğe dalma hissi yaratan sağdan sola kaydırmadır.
Ekran ekleme pushViewController(_:animated:) aracılığıyla yapılır. Kaldırma popViewController(animated:) aracılığıyla yapılır. Kök ekrana dönmek için popToRootViewController(animated:) kullanın. UINavigationController ayrıca viewControllers özelliği (yığındaki tüm denetleyicilerin dizisi) aracılığıyla programatik yığın yönetimini de destekler.
Navigasyon çubuğu, ekran başlığını, bir geri düğmesini ve isteğe bağlı eylem düğmelerini içerir. iOS 11'den itibaren, Large Titles (prefersLargeTitles), kaydırma sırasında animasyonlu olarak küçülen büyütülmüş bir yazı tipinde başlık görüntülemeye izin verir. Bu, navigasyon hiyerarşisini iyileştirir ve kullanıcıyı mevcut bölüm hakkında bilgilendirir.
let detailVC = DetailViewController()
detailVC.title = "Item Details"
navigationController?.pushViewController(detailVC, animated: true)
// Önceki ekrana geri dön
navigationController?.popViewController(animated: true)
// Kök ekrana dön
navigationController?.popToRootViewController(animated: true)
Navigation Component, bildirimsel navigasyon için bir Android Jetpack kütüphanesidir. Bir navigasyon grafiği (nav_graph) aracılığıyla fragmentleri veya Compose ekranlarını yöneten NavController sağlar. Android'de Push, iOS'a benzer: her yeni Fragment geri yığınına eklenir ve geri düğmesi öncekine döner.
NavHost, NavGraph'dan geçerli hedefi görüntüleyen bir kapsayıcıdır. NavGraph, tüm uygulama ekranlarını ve aralarındaki bağlantıları tanımlayan bir XML dosyasıdır. Geçişler, hedefi ve isteğe bağlı argümanları belirten actions aracılığıyla tanımlanır. Navigation Component, sistem geri düğmesini, animasyonları ve durum korumayı otomatik olarak işler.
Ekranlar arasında veri aktarmak için Navigation Component, Safe Args — tür güvenli argüman sınıflarının kod üretimini destekler. Verileri manuel olarak bir Bundle'a yerleştirmek yerine, geliştirici NavGraph'da argümanlar bildirir ve bunları oluşturulan Directions ve Args sınıfları aracılığıyla alır. Safe Args, tür uyumsuzluğu hatalarını ortadan kaldırır ve yeniden düzenlemeyi basitleştirir.
// XML'de NavGraph tanımı
<!-- res/navigation/nav_graph.xml -->
@navigation {
NavHost(startDestination = "list") {
composable("list") { ListScreen() }
composable(
"detail/{itemId}",
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { DetailScreen(it.arguments()?.getInt("itemId") ?: 0) }
}
}
// Programatik olarak gezin
navController.navigate("detail/42")
Bottom Navigation ve Push navigasyonunun kombinasyonu, mobil uygulamalarda yaygın bir modeldir. Her Bottom Navigation sekmesinin kendi ekran yığını vardır. Navigation Component bunu sekreme başına NavHost veya her sekme için ayrı grafiklere sahip tek bir NavHost aracılığıyla destekler. Sekme değiştirme, push yığınlarının durumunu sıfırlamaz.
Push Presentation ve Modal Presentation farklı navigasyon görevlerini çözer. Push, her yeni ekranın bağlamı derinleştirdiği sıralı içerik görüntüleme için tasarlanmıştır. Modal, tamamlanması gereken odaklanmış görevler içindir. Pratikte, belirli senaryo için doğru modeli seçmek önemlidir.
Ana seçim kriterleri: kullanıcı bağlamı kaybetmeden özgürce geri dönebilmeliyse — Push'u seçin. Görev geçiciyse ve ana içeriği (form, yetkilendirme) bloke ediyorsa — Modal'ı kullanın. Aynı ekranda modelleri karıştırmak (Modal içinde Push) kabul edilebilir ancak net bir görsel hiyerarşi gerektirir.
Yaygın bir hata, mantıksal olarak ana akışın parçası olan ekran dizileri için Modal kullanmaktır. Örneğin, bir sipariş oluşturma sihirbazı (Adım 1 → Adım 2 → Adım 3), bir dizi modal pencere yerine modal bir kapsayıcı içinde Push aracılığıyla uygulanmalıdır. Bu, navigasyon hiyerarşisini ve dönüşün öngörülebilirliğini korur.
Her iki platformda Push navigasyonunun tam bir uygulamasını inceleyelim. Swift örneği, programatik yığın yönetimi ve derin bağlantı işleme ile UINavigationController'ı gösterir. Kotlin örneği, NavHost, argümanlar ve animasyonlarla Navigation Component'i gösterir.
class ListViewController: UIViewController {
func showDetail(_ itemId: Int) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let detailVC = storyboard.instantiateViewController(
withIdentifier: "DetailViewController"
) as! DetailViewController
detailVC.itemId = itemId
navigationController?.pushViewController(detailVC, animated: true)
}
}
class DetailViewController: UIViewController {
var itemId: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
title = "Item #\(itemId)"
}
}
@Composable
fun PushNavigationApp() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "list") {
composable("list") {
ListScreen(
onItemClick = { id -> navController.navigate("detail/$id") }
)
}
composable(
"detail/{itemId}",
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { backStackEntry ->
val itemId = backStackEntry.arguments()?.getInt("itemId") ?: 0
DetailScreen(itemId = itemId, onBack = { navController.popBackStack() })
}
}
}
Örnekler temel Push navigasyonunu gösterir: liste → detaylar. iOS, manuel veri aktarımı ile storyboard'lar ve UINavigationController kullanır. Android, tür güvenli argümanlar ve otomatik geri yığın yönetimi ile NavHost kullanır. Her iki yaklaşım da derin bağlantıları, özel animasyonları ve döndürme sırasında durum korumayı destekler.
Sıkça Sorulan Sorular
Push, geri düğmesiyle UINavigationController yığınına bir ekran ekler. Present, geri düğmesi olmayan bir modal pencere açar — kullanıcının açıkça kapatması gerekir. Push sıralı içerik için uygundur, Present odaklanmış görevler için. SwiftUI'de Push, NavigationLink'e ve Present, .sheet'e karşılık gelir.
Navigation Component, belirli bir noktaya kadar popBackStack yöntemleri ve yığın temizleme için popUpTo sağlar. Yığın taşmasını önlemek için navigate'ten önce popUpTo(startDestination) { inclusive = true } kullanın. Bu, yığının aynı anda 5–7'den fazla ekran içermemesini sağlar.
Evet, Push ve Modal'ı birleştirmek standart bir modeldir. Örneğin: liste → detaylara Push → yetkilendirme için Modal. Tavsiye edilir: Modal içine Push yerleştirmeyin — modal bir pencere yığın navigasyonu içermemelidir. Modal bir pencere içinde ekran dizisi gerekiyorsa, modal kapsayıcı içinde Push kullanın.
Push navigasyonundaki derin bağlantılar, uygulamayı belirli bir ekranda açar. iOS, UINavigationController ile URL şemaları ve Universal Links kullanır. Android, NavDeepLink ile Intent Filters kullanır. Her iki durumda da sistem bağlantıyı ayrıştırır ve hedef ekrana bir navigasyon yığını oluşturur, geri dönme yeteneğini korur.
iOS, UINavigationControllerDelegate aracılığıyla özelleştirilebilen standart kaydırma animasyonunu kullanır. Android Navigation Component, XML kaynakları (slide_in_right, slide_out_left) aracılığıyla özel animasyonları destekler. Compose için, animateItemPlacement değiştiricisiyle AnimatedNavHost kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun