Push Presentation mobil geliştirmede: nedir, ekran yığını

Yazar: IT Sectr Yayınlanma: 2026-06-09 Okuma süresi: 5 dk

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 — önceki ekrana otomatik geri dönüş düğmesiyle navigasyon yığınına ekran ekleme.
  • UINavigationController iOS'ta pushViewController ve popViewController yöntemleriyle UIViewController yığınını yönetir.
  • Android Navigation Component, XML veya Compose formatında NavHost ve navigasyon grafikleriyle NavController'ı kullanır.
  • Yığın navigasyonu, kullanıcının önceki herhangi bir ekrana dönmesine izin vererek navigasyon geçmişini korur.
  • Derin bağlantı, Push navigasyonunda Android'de Intent ve NavDeepLink işleme ve iOS'ta URL şemaları aracılığıyla desteklenir.

Push Presentation Nedir?

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.

iOS'ta Push Navigasyonu: UINavigationController

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.

Yığın Yönetimi

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 ve Large Titles

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.

swift
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)

Android'de Push Navigasyonu: Navigation Component

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 ve NavGraph

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.

Argümanlar ve Safe Args

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.

kotlin
// 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")

Push Yığını ile BottomNavigation

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 vs Modal Presentation

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.

Swift ve Kotlin'de Uygulama Örnekleri

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.

swift
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)"
    }
}
kotlin
@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 Presentation, iOS'taki Present'ten nasıl farklıdır?

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.

Android'de derin bir navigasyon yığını nasıl yönetilir?

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.

Bir navigasyonda Push ve Modal birleştirilebilir mi?

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 Presentation, Derin Bağlantılarla nasıl çalışır?

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.

Push geçişleri nasıl animasyonlu hale getirilir?

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

  • Push Presentation, her yeni ekranı geri düğmesiyle öncekinin üzerine ekleyen bir yığın navigasyon modelidir.
  • UINavigationController, navigasyon çubuğuyla pushViewController ve popViewController aracılığıyla iOS'ta yığını yönetir.
  • Android Navigation Component, tür güvenli navigasyon için NavHost, NavGraph ve Safe Args sağlar.
  • Push, içeriği bloke etmemesi ve yığında serbest dönüşe izin vermesiyle Modal'dan ayrılır.
  • Yığın derinliği, optimum uygulama performansı için 10 ekranı geçmemelidir.
  • Push navigasyonundaki derin bağlantılar, geçmiş koruma ile URL şemaları ve NavDeepLink aracılığıyla desteklenir.
  • Tavsiye edilir: hiyerarşik içerik için Push ve odaklanmış görevler için Modal kullanın.

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.

Projeyi tartış

Ayrıca okuyun