UIScrollView mit iOS Auto Layout Constraints: Falsche Größe für Unteransichten

Ich versuche, eine Ansicht in Code zu generieren. Hier ist die Hierarchie meines Ansichtsobjekts

UIScrollViewUIViewUIButton

Die ScrollView sollte dieselbe Größe haben wie das Fenster. Der Knopf sollte so groß wie möglich sein. Ich verwende das iOS-Autolayout, daher sehen die Einschränkungszeichenfolgen für alle meine Objekte so aus

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

Ich habe auch eingestellttranslatesAutoresizingMaskIntoConstraints zuNO für jedes Objekt.

Das Problem ist, dass die Schaltfläche nur die Standardschaltflächengröße erhält. Das übergeordnete Ansichtsobjekt (UIView) erhält nur die Größe, die die Unteransichten benötigen.

rot: UIScrollView / gelb: UIView

Wie kann ich erzwingen, dass diese Ansichten so groß wie die scrollView sind?

Wenn ich ein UIView anstelle des UIScrollView verwende, funktioniert alles wunderbar ...

Hier ist ein Code:

    - (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;

    }

AKTUALISIEREN: Ich weiß wirklich nicht, warum das passiert. Wenn Sie die Ansicht in IB einrichten, die Ausgänge verbinden und die Ansicht im Code instanziieren, verhält sich die Bildlaufansicht wie eine normale Ansicht (die vertikal abprallt). Ihre contentSize wird nicht korrekt berechnet. MehrHier. Aber wie macht man das richtig?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage