AutoLayout-constraints für eine autoresizing Ansicht erstellt, in der ViewController die loadView

Meine UIViewController schafft seine Ansicht durch überschreiben der loadView-Methode:

- (void)loadView {
    UIView *view = [[UIView alloc] init];
    view.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    self.view = view;
}

Nun möchte ich wechseln auf AutoLayout, und daher fügen Sie eine

view.translatesAutoresizingMaskIntoConstraints = NO;

der loadView-Methode. Nun muss ich angeben, den gleichen Einschränkungen, die waren automatisch generierte vor. Mein Ansatz war zu überschreiben updateViewConstraints mit

- (void)updateViewConstraints {
    if (0 == [[self.view constraints] count]) {
        NSDictionary* views = @{@"view" : self.view};

        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:0 views:views]];
        [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:0 views:views]];
     }

    [super updateViewConstraints];
}

Aber ich erhalte eine Ausnahme, weil ich denke, dass diese Art von Einschränkungen gehen mit der super Aussicht:

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to install constraint on view.  Does the constraint reference something from outside the subtree of the view?  That's illegal.

So, wie die richtigen Constraints auszusehen haben?

InformationsquelleAutor Tobias Müller | 2013-04-28

Schreibe einen Kommentar