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

UIScrollViewVistaUIButton

El 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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta