UIStackView
використовує внутрішньо обмеження для позиціонування влаштованих підпереглядів. Саме те, які обмеження створюються, залежить від того, як налаштовано сам вид стека. За замовчуванням подання стека створюватиме обмеження, які викладають його підпорядковані підгляди по горизонтальній лінії, закріплюючи передові та кінцеві подання до власних передових і кінцевих країв. Отже, ваш код створить макет, який виглядає приблизно так:
|[view1][view2]|
Простір, який виділяється для кожного підперегляду, визначається низкою факторів, включаючи внутрішній розмір субпрогляду та його стійкість до стиснення та пріоритети захоплення вмісту. За замовчуванням UIView
екземпляри не визначають внутрішній розмір вмісту. Це щось, що зазвичай надається підкласом, таким як UILabel
абоUIButton
.
Оскільки опір стиснення вмісту та пріоритети захоплення вмісту двох нових UIView
екземплярів будуть однаковими, і жоден з представлень не забезпечує внутрішнього розміру вмісту, механізм компонування повинен найкращим чином здогадуватися, який розмір повинен бути призначений для кожного перегляду. У вашому випадку він призначає першому виду 100% наявного простору, а другому - нічого.
Якщо ви модифікуєте свій код, щоб UILabel
натомість використовувати екземпляри, ви отримаєте кращі результати:
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];
Зауважте, що не потрібно чітко створювати будь-які обмеження самостійно. Це головна перевага використання UIStackView
- вона приховує (часто некрасиві) деталі управління обмеженнями від розробника.