UIScrollView con restricciones de diseño automático de iOS: tamaño incorrecto para subvistas
Estoy tratando de generar una vista en código. Aquí está la jerarquía de mi objeto de vista
UIScrollViewVistaUIButtonEl ScrollView debe ser del mismo tamaño que la ventana. El botón debe ser lo más grande posible. Estoy usando el diseño automático de iOS, por lo que las cadenas de restricción para todos mis objetos se ven así
H:|[object]|
V:|[object]|
También he puestotranslatesAutoresizingMaskIntoConstraints
aNO
para cada objeto.
El problema es que el botón solo obtiene el tamaño de botón predeterminado. Su objeto de vista principal (UIView) solo obtiene el tamaño que necesitan sus subvistas.
rojo: UIScrollView / amarillo: UIView
¿Cómo puedo forzar que esas vistas sean tan grandes como scrollView?
Cuando uso un UIView en lugar de un UIScrollView todo funciona muy bien ...
Aquí hay un código:
- (void) viewDidLoad {
[super viewDidLoad];
// SCROLL VIEW
UIScrollView* scrollView = [UIScrollView new];
scrollView.backgroundColor=[UIColor redColor];
scrollView.translatesAutoresizingMaskIntoConstraints = NO;
//CONTAINER VIEW
UIView *containerView = [UIView new];
containerView.translatesAutoresizingMaskIntoConstraints = NO;
containerView.backgroundColor = [UIColor yellowColor];
[scrollView addSubview:containerView];
// CONSTRAINTS SCROLL VIEW - CONTAINER VIEW
[scrollView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[containerView]|"
options:0 metrics:nil
views:@{@"containerView":containerView}]];
[scrollView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[containerView]|"
options:0 metrics:nil
views:@{@"containerView":containerView}]];
// BUTTON
UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.translatesAutoresizingMaskIntoConstraints = NO;
[button setTitle:@"I'm way to small" forState:UIControlStateNormal];
[containerView addSubview:button];
// CONSTRAINTS CONTAINER VIEW - BUTTON
[containerView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[button]|"
options:0 metrics:nil
views:@{@"button":button}]];
[containerView addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[button]|"
options:0 metrics:nil
views:@{@"button":button}]];
self.view = scrollView;
}
ACTUALIZAR: Realmente no sé por qué está sucediendo esto. Si configura la vista en IB, conecta las salidas e instancia la vista en código, la vista de desplazamiento se comporta como una vista normal (que rebota verticalmente). Su contentSize no se calcula correctamente. Másaquí. ¿Pero cómo hacerlo correctamente?