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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Einschränkungen für die superview. Die Ausnahme wird verursacht durch einen Verweis auf die superview, indem man "|" in der visual-format. Wenn Sie aktualisieren Sie Ihren code wie den folgenden zu arbeiten:
In der Praxis werden Sie wahrscheinlich wollen, um zu überprüfen, für etwas anderes als 0 Randbedingungen auf der superview aber das sollte helfen.
InformationsquelleAutor CEarwood
Sie nicht haben, um die Einschränkungen auf dem root-view Matt Neuburg, erklärt der Kapitel 19 der Programmierung von iOS 6 Buch, im Abschnitt Manuelle Layout:
InformationsquelleAutor Palimondo
Das problem mit CEarwood Ansatz ist, dass dies ein ViewController, und seine Sicht ist nicht die Untersicht eine andere Ansicht, so ruft selbst.Blick.Untersicht nur Ergebnisse in der null. Denken Sie daran, dass die Apple-Dokumentation und-Richtlinien empfehlen dringend, dass Sie eine UIViewController nimmt mehr oder weniger den ganzen Bildschirm (neben der Navigationsleiste oder der tab-Leiste etc.).
Palimondo die Antwort ist im Grunde der richtige: Ihre UIViewController muss init seine Ansicht in loadView, aber es muss nicht angeben, frame oder Einschränkungen, da diese automatisch in den Fenster-Rahmen und-Einschränkungen. Das ist genau das, was wird standardmäßig gemacht wenn Sie nicht loadView implementieren selbst.
InformationsquelleAutor Ben Wheeler
Ich bin mir nicht sicher, Sie brauchen, um die Einschränkungen für die stammansicht des Fensters.
Sagte, die Marker korrekt Aussehen, ich denke, die Ausnahme, die Sie erhalten, weil dies:
verwendet die | - notation zur Darstellung der Ansicht superview. Als root-Ebene anzeigen, es hat keine superview. So etwas kann funktionieren, besser:
Wie viel kostet ein zusätzliches,unbenutztes Sicht eine Rolle? Ich Frage nur hier, das ist eine Frage für Sie. Haben Sie versucht, fallen die Einschränkungen? Welche Einschränkungen sind mit einem Standard-view-controller über das Storyboard?
Die Ansichten erstellt werden programmatisch, also nichts aus dem Storyboard. Der extra-Blick verschwendet cpu-Zeit und Speicher.
Gut, wenn es darauf ankommt, dass viel, um Sie dann es klingt wie Sie brauchen, um zu überspringen, autolayout für das root-Ansicht. "Der Blick im Zusammenhang mit der Fenster-root-view-controller bekommt einen Rahmen auf der Grundlage der Merkmale des Fensters. "- developer.apple.com/library/ios/#featuredarticles/...
InformationsquelleAutor James