Jawabannya adalah [view layoutIfNeeded]
.
Inilah alasannya:
Anda masih mendapatkan lebar dan tinggi tampilan saat ini dengan memeriksa view.bounds.size.width
dan view.bounds.size.height
(atau bingkai, yang setara kecuali Anda bermain-main dengan view.transform
).
Jika yang Anda inginkan adalah lebar dan tinggi yang disiratkan oleh batasan yang ada, jawabannya bukanlah memeriksa batasan secara manual, karena itu akan mengharuskan Anda untuk menerapkan ulang seluruh logika penyelesaian batasan dari sistem tata letak otomatis untuk menafsirkannya. kendala. Alih-alih, yang harus Anda lakukan hanyalah meminta tata letak otomatis untuk memperbarui tata letak itu , sehingga ini memecahkan batasan dan memperbarui nilai view.bounds dengan solusi yang benar, lalu Anda memeriksa view.bounds.
Bagaimana Anda meminta tata letak otomatis untuk memperbarui tata letak? Panggil [view setNeedsLayout]
jika Anda ingin tata letak otomatis memperbarui tata letak pada putaran berikutnya dari putaran proses.
Namun, jika Anda ingin segera memperbarui tata letak, sehingga Anda dapat segera mengakses nilai batas baru nanti dalam fungsi Anda saat ini, atau di titik lain sebelum pergantian putaran proses, Anda perlu memanggil [view setNeedsLayout]
dan [view layoutIfNeeded]
.
Anda mengajukan pertanyaan kedua: "bagaimana saya bisa mengubah batasan tinggi / lebar jika saya tidak memiliki referensi ke sana secara langsung?".
Jika Anda membuat batasan di IB, solusi terbaik adalah membuat IBOutlet di pengontrol tampilan atau tampilan Anda sehingga Anda memiliki referensi langsung ke sana. Jika Anda membuat batasan dalam kode, maka Anda harus menyimpan referensi di properti internal weak pada saat Anda membuatnya. Jika orang lain yang membuat batasan, Anda perlu menemukannya dengan memeriksa properti memeriksa view.constraints pada tampilan, dan mungkin seluruh hierarki tampilan, serta menerapkan logika yang menemukan NSLayoutConstraint yang penting. Ini mungkin cara yang salah, karena ini juga secara efektif mengharuskan Anda untuk menentukan kendala tertentu yang menentukan ukuran batas, ketika tidak ada jaminan untuk menjadi jawaban sederhana untuk pertanyaan itu. Nilai batas akhir bisa menjadi solusi untuk sistem yang sangat rumit dengan banyak kendala,