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
- он скрывает (часто уродливые) детали управления ограничениями от разработчика.
Вы проверили свой выход? Вы регистрировали подпрограммы во время выполнения? – Wain
Использование 'addArrangedSubview:', а не 'addSubview:' – pkamb