UIStackView
usa restricciones internamente para colocar sus subvistas organizadas. Exactamente qué restricciones se crean depende de cómo esté configurada la vista de la pila. De forma predeterminada, una vista de pila creará restricciones que expondrán sus subvistas organizadas en una línea horizontal, fijando las vistas iniciales y finales a sus propios bordes iniciales y finales. Entonces su código produciría un diseño que se ve así:
|[view1][view2]|
El espacio que se asigna a cada subvista está determinado por una serie de factores, incluido el tamaño del contenido intrínseco de la subvista y su resistencia a la compresión y las prioridades de contenido. Por defecto, las UIView
instancias no definen un tamaño de contenido intrínseco. Esto es algo que generalmente proporciona una subclase, como UILabel
o UIButton
.
Dado que la resistencia a la compresión de contenido y las prioridades de abrazo de contenido de dos UIView
instancias nuevas serán las mismas, y ninguna de las vistas proporciona un tamaño de contenido intrínseco, el motor de diseño debe adivinar qué tamaño debe asignarse a cada vista. En su caso, está asignando a la primera vista el 100% del espacio disponible, y nada a la segunda vista.
Si modifica su código para usar UILabel
instancias en su lugar, obtendrá mejores resultados:
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];
Tenga en cuenta que no es necesario crear explícitamente ninguna restricción usted mismo. Este es el principal beneficio del uso UIStackView
: oculta los detalles (a menudo feos) de la gestión de restricciones del desarrollador.