À partir d'iOS7, les contrôleurs de vue utilisent la disposition plein écran par défaut. Dans le même temps, vous avez plus de contrôle sur la façon dont il présente ses vues, et cela se fait avec ces propriétés:
bordsForExtendedLayout
Fondamentalement, avec cette propriété, vous définissez les côtés de votre vue qui peuvent être étendus pour couvrir tout l'écran. Imaginez que vous poussiez un UIViewController
dans un UINavigationController
. Lorsque la vue de ce contrôleur de vue est disposée, elle commencera là où se termine la barre de navigation, mais cette propriété définira les côtés de la vue (haut, gauche, bas, droite) qui peuvent être étendus pour remplir tout l'écran.
Voyons cela avec un exemple:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Ici, vous ne définissez pas la valeur de edgesForExtendedLayout
, par conséquent, la valeur par défaut est prise ( UIRectEdgeAll
), de sorte que la vue étend sa disposition pour remplir tout l'écran.
Voici le résultat:
Comme vous pouvez le voir, l'arrière-plan rouge s'étend derrière la barre de navigation et la barre d'état.
Maintenant, vous allez définir cette valeur sur UIRectEdgeNone
, vous dites donc au contrôleur de vue de ne pas étendre la vue pour couvrir l'écran:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Et le résultat:
ajuste automatiquementScrollViewInsets
Cette propriété est utilisée lorsque votre vue est un UIScrollView
ou similaire, comme un UITableView
. Vous voulez que votre tableau commence là où se termine la barre de navigation, car vous ne verrez pas tout le contenu sinon, mais en même temps, vous voulez que votre tableau couvre tout l'écran lors du défilement. Dans ce cas, le réglage edgesForExtendedLayout
sur Aucun ne fonctionnera pas, car votre table commencera à défiler à la fin de la barre de navigation et ne passera pas derrière.
Voici où cette propriété est utile, si vous laissez le contrôleur de vue ajuster automatiquement les encarts (en définissant cette propriété sur YES, également la valeur par défaut), il ajoutera des encarts en haut du tableau, de sorte que le tableau commencera là où la navigation se termine, mais le défilement couvrira tout l'écran.
C'est quand est réglé sur NO:
Et OUI (par défaut):
Dans les deux cas, le tableau défile derrière la barre de navigation, mais dans le second cas (OUI), il commencera par le dessous de la barre de navigation.
extendedLayoutIncludesOpaqueBars
Cette valeur n'est qu'un ajout aux précédentes. Par défaut, ce paramètre est défini sur NO. Si la barre d'état est opaque, les vues ne seront pas étendues pour inclure la barre d'état, même si vous étendez votre vue pour la couvrir ( edgesForExtendedLayout
à UIRectEdgeAll
).
Si vous définissez la valeur sur OUI, cela permettra à la vue de passer à nouveau sous la barre d'état.
Si quelque chose n'est pas clair, écrivez un commentaire et j'y répondrai.
Comment iOS sait-il quel UIScrollView utiliser?
iOS récupère la première sous-vue de la vue de votre ViewController, celle de l'index 0, et s'il s'agit d'une sous-classe de, UIScrollView
lui applique les propriétés expliquées.
Bien sûr, cela signifie que cela UITableViewController
fonctionne par défaut (puisque UITableView
c'est la première vue).