UIScrollView com restrições de layout automático do iOS: tamanho incorreto para subvisualizações

Estou tentando gerar uma visão no código. Aqui está a hierarquia do meu objeto de visão

UIScrollViewUIViewUIButton

O ScrollView deve ter o mesmo tamanho da janela. O botão deve ser o maior possível. Estou usando o layout automático do iOS, então as cadeias de restrição para todos os meus objetos se parecem com isso

H:|[object]|
V:|[object]|

Eu também definitranslatesAutoresizingMaskIntoConstraints paraNO para cada objeto.

O problema é que o botão só recebe o tamanho padrão do botão. Seu objeto de visualização pai (UIView) obtém apenas o tamanho que suas subvisualizações precisam.

vermelho: UIScrollView / amarelo: UIView

Como posso forçar essas visualizações a serem tão grandes quanto o scrollView?

Quando eu uso um UIView em vez do UIScrollView, tudo funciona muito bem ...

Aqui está um 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;

    }

ATUALIZAR: Eu realmente não sei porque isso está acontecendo. Se você configurar a visualização no IB, conectar as saídas e instanciar a visualização no código, a rolagem se comportará como uma exibição normal (que salta verticalmente). Seu contentSize não é calculado corretamente. MaisAqui. Mas como fazer isso corretamente?

questionAnswers(1)

yourAnswerToTheQuestion