viewWillAppear — adalah metode UIViewController yang dipanggil UIKit setiap kali sebelum layar menjadi terlihat oleh pengguna. Menurut Apple Developer Documentation, metode ini menerima parameter boolean animated yang menunjukkan apakah transisi terjadi dengan animasi. viewWillAppear — adalah tempat utama untuk memperbarui data dan menyinkronkan status layar.
Utama
viewWillAppear — adalah metode UIViewController yang dipanggil UIKit tepat sebelum menambahkan View ke hierarki jendela. Pada saat ini View sudah memiliki ukuran akhir setelah melewati Auto Layout, tetapi belum terlihat oleh pengguna — animasi transisi belum dimulai atau sedang berjalan. Pengembang menimpa metode ini untuk melakukan operasi yang harus terjadi sebelum setiap tampilan layar.
Tidak seperti viewDidLoad yang dipanggil sekali, viewWillAppear dipanggil setiap kali layar akan muncul: saat pembukaan awal, saat kembali dari controller anak, setelah menutup jendela modal dan saat mengganti tab TabBar. Ini menjadikannya metode kunci untuk menjaga status antarmuka tetap terkini.
Metode menerima parameter animated bertipe Bool, yang bernilai true jika kemunculan layar disertai animasi. Parameter ini nyaman untuk diteruskan ke metode NavigationBar dan TabBar yang memiliki parameter serupa untuk perilaku yang konsisten.
Waktu pemanggilan viewWillAppear tergantung pada jenis navigasi, tetapi aturan umumnya tidak berubah: metode dijalankan sebelum View menjadi terlihat. Mari kita lihat skenario utama.
Setelah pemanggilan viewDidLoad, UIKit memulai persiapan untuk ditampilkan: View ditambahkan ke hierarki, proses layout dijalankan, dan tepat sebelum dimulainya animasi transisi, viewWillAppear dipanggil. Pada saat ini layar belum terlihat, tetapi semua subview memiliki ukuran yang benar dan kontennya dapat diperbarui dengan aman.
Ketika pengguna menekan tombol kembali atau memanggil popViewController secara terprogram, UIKit kembali ke layar sebelumnya dan memanggil viewWillAppear padanya. Ini adalah skenario utama untuk penggunaan viewWillAppear — memperbarui daftar setelah menambahkan elemen atau menyinkronkan pengaturan.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
updateBadgeCount()
}
Setelah menutup controller yang disajikan secara modal, UIKit memanggil viewWillAppear pada controller yang menyajikannya. Skenario ini memerlukan perhatian khusus jika Anda menggunakan delegasi atau closure untuk mengirim data kembali — viewWillAppear memastikan layar akan diperbarui setelah menerima hasil.
TabBarController memanggil viewWillAppear pada controller tab yang dipilih setiap kali saat mengganti. Jika pada tab ditampilkan data dinamis — nilai tukar, pemberitahuan, status pengguna — viewWillAppear adalah tempat ideal untuk memperbaruinya.
viewWillAppear menyelesaikan beberapa tugas konkret yang tidak dapat atau tidak optimal dilakukan di metode lain. Mari kita lihat yang utama.
Penggunaan viewWillAppear yang paling umum — memuat ulang UITableView atau UICollectionView setiap kali layar muncul. Jika data mungkin berubah di layar sebelumnya (menambahkan elemen, mengubah status), pemanggilan reloadData di viewWillAppear memastikan pengguna melihat informasi terkini.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
viewModel.synchronize()
tableView.reloadData()
}
Di viewWillAppear nyaman untuk mengonfigurasi tampilan NavigationBar: menyembunyikan atau menampilkannya, mengubah warna, mengatur large title. Jika NavigationBar terlihat berbeda di layar yang berbeda, viewWillAppear adalah tempat yang tepat untuk perubahan ini, karena viewDidLoad hanya dipanggil sekali.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(
false, animated: animated
)
navigationController?.navigationBar.prefersLargeTitles = true
tabBarController?.tabBar.isHidden = false
}
Pemberitahuan yang hanya berarti saat layar terlihat — keyboard, pemberitahuan perubahan konten — dilanggan di viewWillAppear dan dibatalkan di viewDidDisappear. Ini mencegah handler yang tidak perlu saat layar tidak aktif dan melindungi dari kebocoran memori.
Jika layar dapat disembunyikan oleh aplikasi atau diminimalkan, viewWillAppear adalah tempat yang nyaman untuk memulihkan status UI: mengganti segmen, memulihkan posisi scroll, mereset perubahan sementara. Pengguna menerima layar dalam bentuk yang dapat diprediksi setiap kali muncul.
Di layar yang menampilkan penghitung pesan belum dibaca, peringkat atau pemberitahuan, viewWillAppear adalah tempat yang tepat untuk memperbaruinya. Jika pengguna mungkin mengubah jumlah di layar lain, di sini dipanggil perhitungan ulang dan pembaruan UITabBarItem.badgeValue atau indikator khusus. Ini memastikan pengguna selalu melihat angka terkini terlepas dari berapa lama dia berada di layar lain.
Secara terpisah perlu disebutkan bekerja dengan collectionView: jika data di layar disajikan dalam bentuk kisi dengan sel yang berisi penghitung atau status, pembaruannya di viewWillAppear harus selektif. Alih-alih reloadData lengkap, gunakan reloadItemsAtIndexPaths untuk sel yang terlihat untuk menghindari kedipan dan kehilangan posisi scroll.
Memahami perbedaan antara viewWillAppear dan viewDidLoad — dasar arsitektur UIViewController yang benar. Metode ini memiliki frekuensi pemanggilan yang berbeda, konteks yang berbeda dan tujuan yang berbeda.
viewDidLoad dipanggil sekali dan cocok untuk konfigurasi yang tidak berubah seiring waktu: pendaftaran sel, pengaturan delegasi, inisialisasi konstanta. viewWillAppear dipanggil setiap kali muncul dan cocok untuk operasi yang harus diulang: memperbarui data, mengonfigurasi elemen yang terlihat, menyinkronkan status.
| Karakteristik | viewDidLoad | viewWillAppear |
|---|---|---|
| Frekuensi | Sekali | Setiap kali saat muncul |
| View terlihat | Tidak | Tidak (segera akan terlihat) |
| Ukuran View | Belum final | Final |
| Cocok untuk | Konfigurasi sekali | Pembaruan dan sinkronisasi |
| Animasi | Tidak berlaku | Parameter animated |
Aturan emas: jika operasi harus dilakukan hanya sekali — taruh di viewDidLoad. Jika setiap kali kembali ke layar — taruh di viewWillAppear.
Penggunaan yang salah dari viewWillAppear dapat menyebabkan masalah kinerja, pembaruan berlebihan dan status antarmuka yang tidak konsisten. Mari kita lihat kesalahan yang paling umum.
Kesalahan pertama — menduplikasi logika dari viewDidLoad. Jika Anda mendaftarkan sel tabel baik di viewDidLoad maupun di viewWillAppear — pendaftaran akan dilakukan beberapa kali, padahal konfigurasi sekali sudah cukup. Pindahkan semua konfigurasi sekali ke viewDidLoad.
Kesalahan kedua — reloadData tanpa syarat setiap kali muncul. Jika data tidak berubah, memuat ulang tabel menyebabkan permintaan tambahan ke data source dan menggambar ulang sel, mengurangi kinerja. Periksa apakah status benar-benar berubah sebelum memanggil reloadData.
Kesalahan ketiga — bekerja dengan permintaan jaringan tanpa mempertimbangkan bahwa layarmungkin disembunyikan lagi sebelum permintaan selesai. Jika di viewWillAppear Anda memulai permintaan URLSession dan pengguna segera pergi ke layar lain, hasilnya mungkin diterapkan ke View yang sudah tersembunyi. Gunakan tugas yang dapat dibatalkan atau periksa isViewLoaded dan window sebelum memperbarui.
Kesalahan keempat — lupa memanggil super. Tidak memanggil super.viewWillAppear dapat mengganggu pengoperasian controller induk (UINavigationController, UITabBarController) dan menyebabkan pemrosesan gerakan dan transisi yang salah. super harus selalu dipanggil.
Kesalahan kelima — mengubah batasan tanpa memanggil layoutIfNeeded. Jika di viewWillAppear Anda mengubah batasan secara terprogram, UIKit tidak menerapkannya segera — perubahan terakumulasi hingga proses layout berikutnya. Untuk penerapan segera perubahan setelah memodifikasi batasan, panggil view.layoutIfNeeded(). Ini sangat penting saat mengatur tinggi elemen yang tergantung pada konten.
Kesalahan keenam — mencoba menjalankan animasi di viewWillAppear. Seperti disebutkan di atas, UIKit masih memproses animasi transisi dan animasi Anda mungkin bersaing dengan animasi sistem. Jika Anda membutuhkan elemen muncul dengan efek, gunakan animasi masuk di viewDidAppear, dan di viewWillAppear hanya konfigurasikan status awal: transparansi 0, transform skala 0.8, dan seterusnya.
Kesalahan ketujuh — mengabaikan parameter animated. Beberapa pengembang tidak memeriksa nilai animated di viewWillAppear dan melakukan operasi yang harus tergantung pada keberadaan animasi. Misalnya, menyembunyikan NavigationBar dengan animated = false dapat dilakukan tanpa animasi, dan dengan animated = true — dengan animasi, agar transisi terlihat halus. Selalu teruskan parameter animated ke metode UIKit yang sesuai.
Kesalahan kedelapan — memodifikasi UI saat layar tidak terlihat. Jika di viewWillAppear Anda memulai permintaan jaringan dan blok penyelesaiannya memperbarui UI ketika layarmungkin sudah menghilang, pengguna akan melihat kedipan atau status yang tidak konsisten. Selalu periksa isViewLoaded dan window sebelum memperbarui UI di closure. Tindakan sederhana ini mencegah crash dan penggambaran ulang antarmuka yang tidak perlu.
Pertanyaan yang sering diajukan
viewWillAppear dipanggil sebelum animasi kemunculan dimulai, saat View belum terlihat. viewDidAppear — setelah animasi selesai, saat layar telah sepenuhnya ditampilkan dan tersedia untuk interaksi.
Dalam kondisi normal viewWillAppear selalu dipanggil saat layar muncul. Pengecualian — penutupan paksa aplikasi (force quit), saat UIKit tidak sempat memanggil metode Lifecycle.
Ya, wajib. UIKit menggunakan panggilan ini untuk koordinasi internal dengan UINavigationController dan UITabBarController. Tanpa super, gerakan dan animasi transisi bisa rusak.
Setiap kali penggantian tab. UIKit memanggil viewWillAppear pada controller tab yang dipilih segera setelah pengguna menyentuh ikon yang sesuai di TabBar.
Gunakan properti controller atau data source bersama. Sebelum memanggil popViewController, atur nilai yang diperlukan pada controller sebelumnya, dan di viewWillAppear-nya nilai tersebut sudah tersedia.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga