Począwszy od iOS7, kontrolery widoku domyślnie używają układu pełnoekranowego. Jednocześnie masz większą kontrolę nad sposobem, w jaki określa on swoje widoki, a dzieje się to dzięki następującym właściwościom:
edgeForExtendedLayout
Zasadniczo za pomocą tej właściwości można ustawić, które strony widoku można rozszerzyć, aby obejmowały cały ekran. Wyobraź sobie, że wpychasz UIViewController
a UINavigationController
. Po ułożeniu widoku tego kontrolera widoku rozpocznie się on tam, gdzie kończy się pasek nawigacji, ale ta właściwość określi, które strony widoku (górny, lewy, dolny, prawy) można rozszerzyć, aby wypełnić cały ekran.
Zobaczmy to na przykładzie:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Tutaj nie ustawiasz wartości edgesForExtendedLayout
, dlatego przyjmowana jest wartość domyślna ( UIRectEdgeAll
), więc widok rozszerza swój układ, aby wypełnić cały ekran.
Oto wynik:
Jak widać, czerwone tło wystaje za pasek nawigacyjny i pasek stanu.
Teraz ustawisz tę wartość na UIRectEdgeNone
, więc mówisz kontrolerowi widoku, aby nie rozszerzał widoku, aby obejmował ekran:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
A wynik:
automatycznieAdjustsScrollViewInsets
Ta właściwość jest używana, gdy widok jest UIScrollView
podobny lub podobny, na przykład UITableView
. Chcesz, aby Twój stół zaczynał się tam, gdzie kończy się pasek nawigacji, ponieważ nie zobaczysz całej zawartości, jeśli nie, ale jednocześnie chcesz, aby stół obejmował cały ekran podczas przewijania. W takim przypadku ustawienie edgesForExtendedLayout
Brak nie będzie działać, ponieważ tabela zacznie się przewijać w miejscu, w którym kończy się pasek nawigacji, i nie będzie się za nim znajdował.
Tutaj przydatna jest ta właściwość. Jeśli pozwolisz, aby kontroler widoku automatycznie dostosowywał wstawki (ustawienie tej właściwości na TAK, również wartość domyślną), doda wstawki na górze tabeli, więc tabela rozpocznie się w miejscu nawigacji pasek się kończy, ale przewijanie obejmie cały ekran.
To jest, gdy jest ustawiony na NIE:
I TAK (domyślnie):
W obu przypadkach tabela przewija się za paskiem nawigacji, ale w drugim przypadku (TAK) rozpocznie się od paska nawigacji.
ExtendedLayoutIncludesOpaqueBars
Ta wartość jest tylko dodatkiem do poprzednich. Domyślnie ten parametr jest ustawiony na NIE. Jeśli pasek stanu jest nieprzezroczysty, widoki nie zostaną rozszerzone o pasek stanu, nawet jeśli rozszerzysz widok, aby go zakryć ( edgesForExtendedLayout
do UIRectEdgeAll
).
Jeśli ustawisz wartość na TAK, pozwoli to ponownie przejść do widoku poniżej paska stanu.
Jeśli coś nie jest jasne, napisz komentarz, a ja odpowiem.
Skąd iOS wie, z którego UIScrollView korzystać?
iOS pobiera pierwszy widok podrzędny w widoku ViewController, ten o indeksie 0, a jeśli jest to podklasa, UIScrollView
stosuje do niego wyjaśnione właściwości.
Oczywiście oznacza to, że UITableViewController
działa domyślnie (ponieważ UITableView
jest to pierwszy widok).