Ich könnte mich irren, aber meiner Meinung nach ist das Verhalten korrekt. Der Wert topLayout kann vom Container View Controller verwendet werden, um die Unteransichten seiner Ansicht zu gestalten.
Die Referenz sagt:
Um eine Top-Layout-Anleitung ohne Verwendung von Einschränkungen zu verwenden, ermitteln Sie die Position der Anleitung relativ zur oberen Grenze der enthaltenen Ansicht .
Im übergeordneten Element beträgt der Wert relativ zur enthaltenen Ansicht 64.
Im untergeordneten Element ist der Wert relativ zur enthaltenen Ansicht (dem übergeordneten Element) 0.
Im Container View Controller können Sie die Eigenschaft folgendermaßen verwenden:
- (void) viewWillLayoutSubviews {
CGRect viewBounds = self.view.bounds;
CGFloat topBarOffset = self.topLayoutGuide.length;
for (UIView *view in [self.view subviews]){
view.frame = CGRectMake(viewBounds.origin.x, viewBounds.origin.y+topBarOffset, viewBounds.size.width, viewBounds.size.height-topBarOffset);
}
}
Der untergeordnete Ansichtscontroller muss nicht wissen, dass es eine Navigations- und eine Statusleiste gibt: Das übergeordnete Element hat seine Unteransichten unter Berücksichtigung dieser bereits angelegt.
Wenn ich ein neues seitenbasiertes Projekt erstelle, es in einen Navigationscontroller einbetten und diesen Code zu den übergeordneten Ansichtscontrollern hinzufügen, scheint es einwandfrei zu funktionieren:
topLayoutGuide
gründlich genug für verschachtelte ViewController-Containments implementiert wurden. Wirft die Frage auf, wie man damit umgehen könnte, wenn ein benutzerdefinierter Container implementiert wird ...