iOS'ta viewWillAppear: metodun özü ve nasıl kullanılacağı

Yazar: IT Sectr Yayınlanma: 2026-03-05 Okuma süresi: 8 dk

viewWillAppear, UIKit'in bir ekran kullanıcıya görünür hale gelmeden önce her seferinde çağırdığı bir UIViewController metodudur. Apple Geliştirici Dokümantasyonu'na göre, bu metot geçişin animasyonla gerçekleşip gerçekleşmediğini belirten bir boolean animated parametresi alır. viewWillAppear, verileri güncellemek ve ekran durumunu senkronize etmek için ana yerdir.

Önemli Noktalar

  • viewWillAppear, viewDidLoad'un aksine ekran her göründüğünde çağrılır
  • Diğer ekranlardan döndükten sonra verileri güncellemek ve senkronize etmek için kullanılır
  • animated parametresi, görünmenin animasyonlu olup olmadığını belirtir
  • Burada NavigationBar, TabBar ve diğer arayüz öğeleri yapılandırılır
  • Yalnızca ekran görünürken aktif olan geçici bildirimlere abone olmak için uygundur

ViewWillAppear nedir

viewWillAppear, UIKit'in View'i pencere hiyerarşisine eklemeden hemen önce çağırdığı bir UIViewController metodudur. Bu noktada, View Auto Layout geçişlerinden sonra son boyutlarına sahiptir, ancak henüz kullanıcıya görünmez — geçiş animasyonu ya henüz başlamamıştır ya da devam etmektedir. Geliştirici, ekranın her görüntülenmesinden önce gerçekleşmesi gereken işlemleri yapmak için bu metodu geçersiz kılar.

Yalnızca bir kez tetiklenen viewDidLoad'un aksine, viewWillAppear ekran görüneceği her zaman çağrılır: ilk açılışta, alt denetleyiciden dönüşte, modal pencere kapatıldıktan sonra ve TabBar sekmeleri değiştirilirken. Bu, onu güncel bir arayüz durumu sağlamak için anahtar bir metot haline getirir.

Metot, Bool türünde bir animated parametresi alır. Ekran görünümüne animasyon eşlik ediyorsa true olur. Bu parametre, tutarlı davranış için benzer bir parametreye sahip olan NavigationBar ve TabBar metotlarına iletmek için kullanışlıdır.

ViewWillAppear ne zaman çağrılır

viewWillAppear çağrısının zamanlaması gezinme türüne bağlıdır, ancak genel kural değişmez: metot View görünür olmadan önce tetiklenir. Ana senaryoları inceleyelim.

Ekranın ilk açılışında

viewDidLoad'dan sonra UIKit görüntülemeye hazırlanmaya başlar: View hiyerarşiye eklenir, layout geçişleri tetiklenir ve geçiş animasyonu başlamadan hemen önce viewWillAppear çağrılır. Bu anda, ekran henüz görünmez, ancak tüm alt görünümler doğru boyutlara sahiptir ve içerikleri güvenle güncellenebilir.

NavigationController'dan dönerken

Kullanıcı geri düğmesine dokunduğunda veya programatik olarak popViewController'ı çağırdığında, UIKit önceki ekrana döner ve onun viewWillAppear'ını çağırır. Bu, viewWillAppear'ı kullanmak için ana senaryodur — bir öğe ekledikten sonra listeyi güncellemek veya ayarları senkronize etmek.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
    updateBadgeCount()
}

Modal pencere kapatıldığında

Modal olarak sunulan bir denetleyici kapatıldıktan sonra UIKit, onu sunan denetleyicide viewWillAppear'ı çağırır. Bu senaryo, verileri geri iletmek için delegeler veya closure'lar kullanıyorsanız özellikle dikkat gerektirir — viewWillAppear, sonucu aldıktan sonra ekranın güncellenmesini sağlar.

TabBar sekmeleri değiştirilirken

TabBarController, her değişiklikte seçili sekmenin denetleyicisinde viewWillAppear'ı çağırır. Sekme dinamik veriler gösteriyorsa — döviz kurları, bildirimler, kullanıcı durumu — viewWillAppear bunları güncellemek için ideal yerdir.

ViewWillAppear'daki pratik görevler

viewWillAppear, diğer metotlarda yapılması imkansız veya optimal olmayan birkaç belirli görevi çözer. Başlıcalarını inceleyelim.

Tablo verilerini güncelleme

viewWillAppear'ın en yaygın kullanımı, ekran her göründüğünde bir UITableView veya UICollectionView'i yeniden yüklemektir. Önceki ekranda veriler değişmiş olabilirse (öğe eklendi, durum değişti), viewWillAppear'da reloadData çağırmak, kullanıcının güncel bilgileri görmesini sağlar.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    viewModel.synchronize()
    tableView.reloadData()
}

NavigationBar ve TabBar'ı yapılandırma

viewWillAppear'da NavigationBar'ın görünümünü yapılandırmak uygundur: gizleme veya gösterme, rengini değiştirme, büyük başlık ayarlama. Farklı ekranlarda NavigationBar stilleri farklıysa, viewDidLoad yalnızca bir kez çağrıldığından viewWillAppear bu değişiklikler için doğru yerdir.

swift
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.setNavigationBarHidden(
        false, animated: animated
    )
    navigationController?.navigationBar.prefersLargeTitles = true
    tabBarController?.tabBar.isHidden = false
}

Geçici bildirimlere abone olma

Yalnızca ekran görünürken anlamlı olan bildirimler — klavye bildirimleri, içerik değişikliği bildirimleri — viewWillAppear'da abone olunur ve viewDidDisappear'da abonelik iptal edilir. Bu, ekran aktif olmadığında gereksiz işleyicileri önler ve bellek sızıntılarına karşı korur.

UI durumunu geri yükleme

Ekran uygulama tarafından gizlenebiliyor veya küçültülebiliyorsa, viewWillAppear UI durumunu geri yüklemek için uygun bir yerdir: segmentleri değiştirme, kaydırma konumunu geri yükleme, geçici değişiklikleri sıfırlama. Kullanıcı, ekran her göründüğünde onu öngörülebilir bir durumda alır.

Rozetleri ve sayaçları güncelleme

Okunmamış mesaj, derecelendirme veya bildirim sayaçlarını gösteren ekranlarda, viewWillAppear bunları güncellemek için doğru yerdir. Kullanıcı başka bir ekranda miktarı değiştirmiş olabilir, burada yeniden hesaplama ve UITabBarItem.badgeValue veya özel göstergelerin güncellenmesi çağrılır. Bu, kullanıcının diğer ekranlarda ne kadar kaldığına bakılmaksızın her zaman güncel sayıları görmesini sağlar.

collectionView ile çalışırken özel dikkat gösterilmelidir: ekrandaki veriler sayaç veya durum içeren hücrelerden oluşan bir ızgara olarak sunuluyorsa, viewWillAppear'daki güncellemeleri seçici olmalıdır. Tam reloadData yerine, görünür hücreler için reloadItemsAtIndexPaths kullanarak titreme ve kaydırma konumu kaybını önleyin.

ViewWillAppear ve viewDidLoad arasındaki farklar

viewWillAppear ve viewDidLoad arasındaki farkı anlamak, doğru UIViewController mimarisinin temelidir. Bu metotlar farklı çağrı sıklığına, farklı bağlama ve farklı amaca sahiptir.

viewDidLoad bir kez çağrılır ve zamanla değişmeyen yapılandırmalar için uygundur: hücreleri kaydetme, delegeleri ayarlama, sabitleri başlatma. viewWillAppear her görünümde çağrılır ve tekrarlanması gereken işlemler için uygundur: verileri güncelleme, görünür öğeleri yapılandırma, durumu senkronize etme.

ÖzellikviewDidLoadviewWillAppear
SıklıkBir kezHer görünümde
View görünürHayırHayır (yakında görünecek)
View boyutlarıSon değilSon
UygunTek seferlik kurulumGüncelleme ve senkronizasyon
AnimasyonUygulanamazanimated parametresi

Altın kural: bir işlem yalnızca bir kez yürütülmeliyse — viewDidLoad'a koyun. Ekrana her dönüşte yürütülmeliyse — viewWillAppear'a koyun.

ViewWillAppear'da yaygın hatalar

Yanlış kullanım viewWillAppear'ın performans sorunlarına, aşırı güncellemelere ve tutarsız arayüz durumuna yol açabilir. En yaygın hatalara bakalım.

İlk hata — viewDidLoad mantığını kopyalamak. viewDidLoad ve viewWillAppear'da tablo hücrelerini kaydederseniz, tek seferlik kurulum yeterli olmasına rağmen kayıt birden çok kez yürütülür. Tüm tek seferlik yapılandırmaları viewDidLoad'a taşıyın.

İkinci hata — her görünümde koşulsuz reloadData. Veriler değişmemişse, tabloyu yeniden yüklemek veri kaynağına gereksiz sorgulara ve hücrelerin yeniden çizilmesine neden olarak performansı düşürür. reloadData'yı çağırmadan önce durumun gerçekten değişip değişmediğini kontrol edin.

Üçüncü hata — istek tamamlanmadan ekranın tekrar gizlenebileceğini düşünmeden ağ istekleriyle çalışmak. viewWillAppear'da bir URLSession isteği başlatırsanız ve kullanıcı hemen başka bir ekrana giderse, sonuç zaten gizli bir View'e uygulanabilir. Güncellemeden önce iptal edilebilir görevler kullanın veya isViewLoaded ve window'u kontrol edin.

Dördüncü hata — super çağırmayı unutmak. super.viewWillAppear'ı çağırmamak, üst denetleyicilerin (UINavigationController, UITabBarController) davranışını bozabilir ve jest ve geçişlerin yanlış işlenmesine yol açabilir. super her zaman çağrılmalıdır.

Beşinci hata — layoutIfNeeded'ı çağırmadan kısıtlamaları değiştirmek. viewWillAppear'da programatik olarak kısıtlamaları değiştirirseniz, UIKit bunları hemen uygulamaz — değişiklikler bir sonraki layout geçişine kadar birikir. Kısıtlamaları değiştirdikten sonra değişikliklerin hemen uygulanması için view.layoutIfNeeded() çağırın. Bu, özellikle içeriğe bağlı öğelerin yüksekliğini ayarlarken önemlidir.

Altıncı hata — viewWillAppear'da animasyon yürütmeye çalışmak. Yukarıda belirtildiği gibi, UIKit hala geçiş animasyonunu işliyor ve animasyonunuz sistem animasyonuyla rekabet edebilir. Bir öğenin efektle görünmesini istiyorsanız, viewDidAppear'da gelen animasyonu kullanın ve viewWillAppear'da yalnızca başlangıç durumunu yapılandırın: saydamlık 0, ölçek 0,8'de transform vb.

Yedinci hata — animated parametresini görmezden gelmek. Bazı geliştiriciler viewWillAppear'da animated değerini kontrol etmez ve animasyonun varlığına bağlı olması gereken işlemleri yürütür. Örneğin, NavigationBar'ı animated = false olduğunda animasyonsuz gizleyebilirsiniz, animated = true olduğunda ise animasyonlu gizleyerek geçişin pürüzsüz görünmesini sağlayabilirsiniz. animated parametresini her zaman uygun UIKit metotlarına iletin.

Sekizinci hata — ekran görünür değilken arayüzü değiştirmek. viewWillAppear'da bir ağ isteği başlatırsanız ve tamamlama bloğu, ekran zaten kaybolmuş olabilecekken arayüzü güncellerse, kullanıcı titreme veya tutarsız durum görür. Closure'larda arayüzü güncellemeden önce her zaman isViewLoaded ve window'u kontrol edin. Bu basit eylem, çökmeleri ve gereksiz arayüz yeniden çizimlerini önler.

Sıkça Sorulan Sorular

ViewWillAppear viewDidAppear'dan nasıl farklıdır?

viewWillAppear, görünme animasyonu başlamadan önce, View henüz görünmezken çağrılır. viewDidAppear, animasyon tamamlandıktan sonra, ekran tamamen görüntülendiğinde ve etkileşime hazır olduğunda çağrılır.

ViewWillAppear çağrılmayabilir mi?

Normal koşullar altında, ekran göründüğünde viewWillAppear her zaman çağrılır. İstisna, UIKit'in Yaşam Döngüsü metotlarını çağırmak için zamanı olmadığı uygulamanın zorla kapatılmasıdır.

super.viewWillAppear çağırmak gerekli mi?

Evet, kesinlikle gerekli. UIKit bu çağrıyı UINavigationController ve UITabBarController ile iç koordinasyon için kullanır. super olmadan, jestler ve geçiş animasyonları bozulabilir.

TabBarController'da viewWillAppear ne sıklıkta çağrılır?

Her sekme değişiminde. UIKit, kullanıcı TabBar'da ilgili simgeye dokunduğu anda seçili sekmenin denetleyicisinde viewWillAppear'ı çağırır.

ViewWillAppear aracılığıyla veriler nasıl geri iletilir?

Denetleyici özelliklerini veya paylaşılan bir veri kaynağını kullanın. popViewController'ı çağırmadan önce, önceki denetleyicide gerekli değerleri ayarlayın ve bunlar viewWillAppear'ında zaten kullanılabilir olacaktır.

Özet

  • viewWillAppear, tek seferlik viewDidLoad'un aksine ekran her görünmeden önce çağrılır
  • Tabloların, koleksiyonların ve UI durumunun verilerini güncellemek için kullanılır
  • animated parametresi, davranışı animasyonlu ve animasyonsuz geçişlere uyarlamaya olanak tanır
  • NavigationBar, TabBar ve diğer gezinme öğeleri viewWillAppear'da yapılandırılır
  • Geçici bildirim abonelikleri viewWillAppear için geçerli bir kullanım durumudur
  • viewDidLoad mantığını kopyalamaktan ve koşulsuz reloadData'dan kaçının
  • Doğru gezinme davranışı için her zaman super.viewWillAppear çağırı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