Saya tidak dapat menemukan jawaban yang jelas pada dokumentasi Apple mengenai Cocoa Autolayout tentang perbedaan antara pelukan konten dan resistensi kompresi.
Adakah yang bisa menjelaskan penggunaan dan perbedaan mereka?
cocoa
autolayout
dmitrynikolaev
sumber
sumber
content-hugging
: akan berjuang melawan memiliki ruang putih. Itu hanya akan memaksa pandangan untuk berkeliling Anda. Tetapi jika Anda tidak memiliki terlalu banyak ruang, dan sebaliknya memiliki tempat yang sangat sedikit makacontent-compressions-resistance
akan melawan pandangan Anda karena tidak dapat menampilkan semua kontennya, misalnya label akan terpotong.Jawaban:
Ringkasan singkat konsep:
Contoh:
Katakanlah Anda memiliki tombol seperti ini:
dan Anda telah menyematkan tepi pada superview yang lebih besar dengan prioritas 500.
Kemudian, jika prioritas Memeluk> 500 akan terlihat seperti ini:
Jika Memeluk prioritas <500 akan terlihat seperti ini:
Jika superview sekarang menyusut maka, jika prioritas Perlawanan Kompresi> 500, itu akan terlihat seperti ini
Atau jika prioritas Perlawanan Kompresi <500, itu bisa terlihat seperti ini:
Jika tidak bekerja seperti ini, maka Anda mungkin memiliki beberapa kendala lain yang mengacaukan pekerjaan baik Anda!
Misalnya Anda bisa menyematkannya ke superview dengan prioritas 1000. Atau Anda dapat memiliki prioritas lebar. Jika demikian, ini dapat membantu:
Editor> Ukuran untuk Menyesuaikan Konten
sumber
Lihatlah tutorial video ini tentang Autolayout , mereka menjelaskannya dengan cermat
sumber
sumber: @mokagio
Ukuran Konten Intrinsik - Cukup jelas, tetapi pandangan dengan konten variabel menyadari seberapa besar konten mereka dan menggambarkan ukuran konten mereka melalui properti ini. Beberapa contoh nyata dari tampilan yang memiliki ukuran konten intrinsik adalah UIImageViews, UILabels, UIButtons.
Prioritas Memeluk Konten - Semakin tinggi prioritas ini, semakin banyak yang menolak semakin besar ukuran konten intrinsiknya.
Prioritas Ketahanan Kompresi Konten - Semakin tinggi prioritas ini, semakin banyak pandangan yang menolak menyusut lebih kecil dari ukuran konten intrinsiknya.
Periksa di sini untuk penjelasan lebih lanjut: AUTO LAYOUT MAGIC: PRIORITAS UKURAN KONTEN
sumber
Katakanlah Anda memiliki tombol dengan teks, "Klik Saya". Berapa lebar tombol itu?
Pertama, Anda tentu tidak ingin tombolnya lebih kecil dari teks. Jika tidak, teks akan terpotong. Ini adalah prioritas ketahanan kompresi horisontal.
Kedua, Anda tidak ingin tombolnya menjadi lebih besar dari yang seharusnya. Sebuah tombol yang terlihat seperti ini, [Klik Saya], jelas terlalu besar. Anda ingin tombol "memeluk" isinya tanpa terlalu banyak bantalan. Ini adalah prioritas memeluk konten horisontal. Untuk sebuah tombol, itu tidak sekuat prioritas ketahanan kompresi horisontal.
sumber
Jika
view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, maka tata letak otomatis menciptakan batasan tipe khususNSContentSizeLayoutConstraint
. Batasan ini bertindak seperti dua batasan normal:view.width <= view.intrinsicContentSize.width
dengan prioritas memeluk horisontal, danview.width >= view.intrinsicContentSize.width
dengan prioritas ketahanan kompresi horisontal.Di Swift, dengan jangkar tata letak baru iOS 9, Anda dapat mengatur batasan yang setara seperti ini:
Demikian pula, jika
view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, maka tata letak otomatis membuatNSContentSizeLayoutConstraint
yang bertindak seperti dua kendala pada ketinggian tampilan. Dalam kode, mereka akan terlihat seperti ini:Anda dapat melihat
NSContentSizeLayoutConstraint
contoh khusus ini (jika ada) dengan mencetakview.constraints
setelah tata letak telah berjalan. Contoh:sumber
Memeluk Konten dan Prioritas Ketahanan Kompresi Konten berfungsi untuk elemen yang dapat menghitung ukurannya secara intrinsik tergantung pada konten yang masuk.
Dari dokumen Apple :
sumber
Itu
Content hugging priority
seperti karet gelang yang ditempatkan di sekitar tampilan. Semakin tinggi nilai prioritas, semakin kuat karet gelang dan semakin banyak yang ingin dipeluk dengan ukuran kontennya. Nilai prioritas dapat dibayangkan seperti "kekuatan" karet gelangDan
Content Compression Resistance
, berapa banyak tampilan "menolak" semakin kecil Tampilan dengan nilai prioritas resistensi yang lebih tinggi adalah yang akan menolak kompresi.sumber