UIStackView
menggunakan kendala secara internal untuk mengatur subview yang diatur. Kendala apa yang dibuat tergantung pada bagaimana tampilan tumpukan itu sendiri dikonfigurasi. Secara default, tampilan tumpukan akan menciptakan kendala yang mengatur tampilan subviews dalam garis horizontal, menyematkan tampilan depan dan belakang ke tepi depan dan belakangnya sendiri. Jadi kode Anda akan menghasilkan tata letak yang terlihat seperti ini:
|[view1][view2]|
Ruang yang dialokasikan untuk masing-masing subview ditentukan oleh sejumlah faktor termasuk ukuran konten intrinsik subview dan resistensi kompresi serta prioritas pelukan konten. Secara default, UIView
instance tidak menentukan ukuran konten intrinsik. Ini adalah sesuatu yang umumnya disediakan oleh subkelas, seperti UILabel
atau UIButton
.
Karena resistensi kompresi konten dan prioritas pelukan konten dari dua UIView
instance baru akan sama, dan tidak ada tampilan yang menyediakan ukuran konten intrinsik, mesin tata letak harus membuat tebakan terbaik untuk ukuran apa yang harus dialokasikan untuk setiap tampilan. Dalam kasus Anda, ini menetapkan tampilan pertama 100% dari ruang yang tersedia, dan tidak ada pada tampilan kedua.
Jika Anda mengubah kode Anda untuk menggunakan UILabel
instance, Anda akan mendapatkan hasil yang lebih baik:
UILabel *label1 = [UILabel new];
label1.text = @"Label 1";
label1.backgroundColor = [UIColor blueColor];
UILabel *label2 = [UILabel new];
label2.text = @"Label 2";
label2.backgroundColor = [UIColor greenColor];
[self.stack1 addArrangedSubview:label1];
[self.stack1 addArrangedSubview:label2];
Perhatikan bahwa Anda tidak perlu membuat kendala sendiri secara eksplisit. Ini adalah manfaat utama penggunaan UIStackView
- menyembunyikan detail (seringkali jelek) dari manajemen kendala dari pengembang.