Pertanyaan yang saya miliki sederhana tetapi saya tidak dapat menemukan informasi apa pun di dalam dokumentasi.
Apa yang terjadi dengan batasan tata letak saat tampilan dihapus dari hierarki tampilan (atau dipindahkan ke tampilan lain)?
Sebagai contoh, mari kita C
buat wadah dengan subview A
dan B
. Penampung C
memiliki beberapa kendala. Lalu kami menelepon [A removeFromSuperview]
. Apa yang terjadi dengan kendala untuk A
?
Apa yang kemudian terjadi jika kita menambahkan A
ke C
lagi?
sumber
Karena saya punya pertanyaan ini juga, saya memeriksa Apple Docs hanya untuk iseng, dan ternyata didokumentasikan bahwa kendala dihapus.
The dokumentasi untuk metode UIView removeFromSuperview negara:
Saya tidak yakin apakah ini didokumentasikan tahun lalu ketika pertanyaan asli diposting, tetapi saya hanya berpikir saya akan membagikan informasi ini jika ada yang membutuhkannya ...
sumber
Namun perlu diketahui, jika Anda memiliki dua tampilan induk independen A dan B, dan subview C, di mana C saat ini adalah subview dari A, dengan batasan yang sesuai, bahwa memanggil [B addSubview: C] TIDAK akan menghapus batasan apa pun yang terkait dengan A dan C, dan tata letak otomatis akan mulai menampilkan pengecualian, karena batasan tersebut tidak lagi terkait dengan tampilan dalam hierarki yang sama.
Anda perlu memanggil [C removeFromSuperview] secara eksplisit untuk menghapus batasan, sebelum menambahkan C ke B.
Ini benar di Mac OS X - Saya belum memeriksa iOS
sumber
Batasan juga dihapus saat Anda
[A removeFromSuperview]
Mereka dilupakan dan menambahkan A ke C lagi tidak menambah batasan.
sumber
Mereka juga dihapus, Anda dapat melakukan tes sederhana. Ambil tampilan SUBVIEW dan buat batasan biaya yang membatasi SUBVIEW untuk mengikuti pengubahan ukuran tampilan supernya (seperti melekat pada tepi superview). Untuk melakukan itu Anda menambahkan SUBVIEW sebagai subview untuk CONTAINERVIEW ini dan menambahkan sebagai kendala seperti itu:
V: | - [SUBVIEW] - |
H: | - [SUBVIEW] - |
Batasan ini harus ditambahkan ke superview SUBVIEW, jadi CONTAINERVIEW.
Jika Anda menghapus SUBVIEW hanya dengan memeriksa semua kendala CONTAINERVIEW Anda dapat melihat bahwa dua tidak ada lagi.
sumber
Pertanyaan ini juga dapat dibuktikan oleh pembuat antarmuka. Ketika drag and drop a
UIView
padaViewController
add constraints lalu hapusUIView
, Anda bisa melihat constraints biru menghilang.sumber