A partir do iOS7, os controladores de exibição usam o layout de tela cheia por padrão. Ao mesmo tempo, você tem mais controle sobre como ele expõe suas visualizações, e isso é feito com essas propriedades:
edgeForExtendedLayout
Basicamente, com essa propriedade, você define quais lados da visualização podem ser estendidos para cobrir a tela inteira. Imagine que você insere um UIViewController
em um UINavigationController
. Quando a exibição desse controlador de exibição é organizada, ela começa onde a barra de navegação termina, mas essa propriedade define quais lados da exibição (superior, esquerda, inferior, direita) podem ser estendidos para preencher a tela inteira.
Vamos vê-lo com um exemplo:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Aqui você não está definindo o valor de edgesForExtendedLayout
, portanto, o valor padrão é obtido ( UIRectEdgeAll
), portanto a exibição estende seu layout para preencher a tela inteira.
Este é o resultado:

Como você pode ver, o fundo vermelho se estende atrás da barra de navegação e da barra de status.
Agora, você definirá esse valor como UIRectEdgeNone
, dizendo ao controlador de exibição para não estender a exibição para cobrir a tela:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
E o resultado:

automaticAdjustsScrollViewInsets
Essa propriedade é usada quando sua visualização é UIScrollView
ou semelhante, como a UITableView
. Você deseja que sua tabela comece onde a barra de navegação termina, porque você não verá todo o conteúdo, se não, mas ao mesmo tempo deseja que sua tabela cubra a tela inteira ao rolar. Nesse caso, definir edgesForExtendedLayout
como Nenhum não funcionará porque sua tabela começará a rolar onde a barra de navegação termina e ela não ficará atrás dela.
Aqui é onde essa propriedade é útil, se você permitir que o controlador de visualização ajuste automaticamente as inserções (configurando essa propriedade como YES, também o valor padrão), ele adicionará inserções na parte superior da tabela, para que a tabela comece onde a navegação a barra termina, mas a rolagem cobre a tela inteira.
É quando está definido como NÃO:

E SIM (por padrão):

Nos dois casos, a tabela rola atrás da barra de navegação, mas no segundo caso (YES), ela começará abaixo da barra de navegação.
extendedLayoutIncludesOpaqueBars
Este valor é apenas uma adição aos anteriores. Por padrão, este parâmetro está definido como NÃO. Se a barra de status for opaca, as visualizações não serão estendidas para incluir a barra de status, mesmo se você estender sua visualização para cobri-la ( edgesForExtendedLayout
para UIRectEdgeAll
).
Se você definir o valor como YES, isso permitirá que a exibição volte novamente para a barra de status.
Se algo não estiver claro, escreva um comentário e eu responderei.
Como o iOS sabe qual UIScrollView usar?
O iOS obtém a primeira subvisão na visualização do seu ViewController, aquela no índice 0 e, se for uma subclasse UIScrollView
, aplica as propriedades explicadas a ela.
Obviamente, isso significa que UITableViewController
funciona por padrão (já que UITableView
é a primeira visualização).