Ab iOS7 verwenden die View Controller standardmäßig das Vollbild-Layout. Gleichzeitig haben Sie mehr Kontrolle darüber, wie die Ansichten dargestellt werden. Dies geschieht mit den folgenden Eigenschaften:
KantenForExtendedLayout
Grundsätzlich legen Sie mit dieser Eigenschaft fest, welche Seiten Ihrer Ansicht auf den gesamten Bildschirm erweitert werden können. Stellen Sie sich vor, Sie drücken ein UIViewController
in ein UINavigationController
. Wenn die Ansicht dieses Ansichtscontrollers angelegt ist, beginnt sie dort, wo die Navigationsleiste endet. Mit dieser Eigenschaft wird jedoch festgelegt, welche Seiten der Ansicht (oben, links, unten, rechts) erweitert werden können, um den gesamten Bildschirm auszufüllen.
Lassen Sie es uns anhand eines Beispiels sehen:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Hier legen Sie nicht den Wert von fest edgesForExtendedLayout
, daher wird der Standardwert ( UIRectEdgeAll
) verwendet, sodass die Ansicht ihr Layout erweitert, um den gesamten Bildschirm auszufüllen.
Das ist das Ergebnis:
Wie Sie sehen können, erstreckt sich der rote Hintergrund hinter der Navigationsleiste und der Statusleiste.
Jetzt setzen Sie diesen Wert auf UIRectEdgeNone
und weisen den Ansichts-Controller an, die Ansicht nicht auf den Bildschirm auszudehnen:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Und das Ergebnis:
autoAdjustsScrollViewInsets
Diese Eigenschaft wird verwendet, wenn Ihre Ansicht UIScrollView
ähnlich oder ähnlich ist, z UITableView
. Sie möchten, dass Ihre Tabelle dort beginnt, wo die Navigationsleiste endet, da sonst nicht der gesamte Inhalt angezeigt wird. Gleichzeitig soll Ihre Tabelle beim Scrollen den gesamten Bildschirm abdecken. In diesem Fall edgesForExtendedLayout
funktioniert die Einstellung " Keine" nicht, da Ihre Tabelle an der Stelle, an der die Navigationsleiste endet, einen Bildlauf durchführt und nicht dahinter steht.
Hier ist diese Eigenschaft nützlich. Wenn Sie den Ansichts-Controller die Einfügungen automatisch anpassen lassen (indem Sie diese Eigenschaft auf JA setzen, auch den Standardwert), werden am oberen Rand der Tabelle Einfügungen hinzugefügt, sodass die Tabelle dort beginnt, wo die Navigation beginnt Die Leiste endet, aber der Bildlauf deckt den gesamten Bildschirm ab.
Dies ist, wenn auf NO gesetzt ist:
Und JA (standardmäßig):
In beiden Fällen wird die Tabelle hinter der Navigationsleiste gescrollt, im zweiten Fall (JA) wird sie unterhalb der Navigationsleiste gestartet.
ExtendedLayoutIncludesOpaqueBars
Dieser Wert ist nur eine Ergänzung zu den vorherigen. Standardmäßig ist dieser Parameter auf NO eingestellt. Wenn die Statusleiste undurchsichtig ist, werden die Ansichten nicht um die Statusleiste erweitert, selbst wenn Sie Ihre Ansicht erweitern, um sie abzudecken ( edgesForExtendedLayout
bis UIRectEdgeAll
).
Wenn Sie den Wert auf YES setzen, wird die Ansicht wieder unter die Statusleiste verschoben.
Wenn etwas nicht klar ist, schreibe einen Kommentar und ich werde ihn beantworten.
Woher weiß iOS, welches UIScrollView verwendet werden soll?
iOS greift auf die erste Unteransicht in der Ansicht Ihres ViewControllers zu, die am Index 0, und wenn es sich um eine Unterklasse von handelt UIScrollView
, werden die erläuterten Eigenschaften darauf angewendet .
Dies bedeutet natürlich, dass dies UITableViewController
standardmäßig funktioniert (da dies UITableView
die erste Ansicht ist).