A partir de iOS7, los controladores de vista usan el diseño de pantalla completa de forma predeterminada. Al mismo tiempo, tienes más control sobre cómo presenta sus vistas, y eso se hace con esas propiedades:
edgeForExtendedLayout
Básicamente, con esta propiedad usted establece qué lados de su vista se pueden extender para cubrir toda la pantalla. Imagina que empujas un UIViewController
a UINavigationController
. Cuando se presenta la vista de ese controlador de vista, comenzará donde termina la barra de navegación, pero esta propiedad establecerá qué lados de la vista (arriba, izquierda, abajo, derecha) se pueden extender para llenar toda la pantalla.
Veamos con un ejemplo:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Aquí no está configurando el valor de edgesForExtendedLayout
, por lo tanto, se toma el valor predeterminado ( UIRectEdgeAll
), por lo que la vista extiende su diseño para llenar toda la pantalla.
Este es el resultado:
Como puede ver, el fondo rojo se extiende detrás de la barra de navegación y la barra de estado.
Ahora, va a establecer ese valor en UIRectEdgeNone
, por lo que le está diciendo al controlador de vista que no extienda la vista para cubrir la pantalla:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Y el resultado:
automaticAdjustsScrollViewInsets
Esta propiedad se usa cuando su vista es una UIScrollView
o similar, como una UITableView
. Desea que su tabla comience donde termina la barra de navegación, porque de lo contrario no verá todo el contenido, pero al mismo tiempo desea que su tabla cubra toda la pantalla al desplazarse. En ese caso, establecerlo edgesForExtendedLayout
en Ninguno no funcionará porque su tabla comenzará a desplazarse hacia donde termina la barra de navegación y no irá detrás de ella.
Aquí es donde esta propiedad es útil, si deja que el controlador de vista ajuste automáticamente las inserciones (estableciendo esta propiedad en SÍ, también el valor predeterminado) agregará inserciones en la parte superior de la tabla, por lo que la tabla comenzará donde la navegación la barra termina, pero el desplazamiento cubrirá toda la pantalla.
Esto es cuando se establece en NO:
Y SÍ (por defecto):
En ambos casos, la tabla se desplaza detrás de la barra de navegación, pero en el segundo caso (SÍ), comenzará desde debajo de la barra de navegación.
extendedLayoutIncludesOpaqueBars
Este valor es solo una adición a los anteriores. Por defecto, este parámetro está establecido en NO. Si la barra de estado es opaca, las vistas no se extenderán para incluir la barra de estado, incluso si extiende su vista para cubrirla ( edgesForExtendedLayout
a UIRectEdgeAll
).
Si establece el valor en SÍ, esto permitirá que la vista vuelva a estar debajo de la barra de estado.
Si algo no está claro, escribe un comentario y lo responderé.
¿Cómo sabe iOS qué UIScrollView usar?
iOS toma la primera subvista en la vista de su ViewController, la que está en el índice 0, y si es una subclase de, UIScrollView
entonces le aplica las propiedades explicadas.
Por supuesto, esto significa que UITableViewController
funciona de forma predeterminada (ya que UITableView
es la primera vista).