Начиная с iOS7, контроллеры представления по умолчанию используют полноэкранный макет. В то же время у вас есть больший контроль над тем, как он размещает свои представления, и это делается с этими свойствами:
edgesForExtendedLayout
По сути, с помощью этого свойства вы устанавливаете, какие стороны вашего вида могут быть расширены, чтобы охватить весь экран. Представь, что ты толкаешь UIViewController
в себя UINavigationController
. Когда представление этого контроллера представления выложено, оно начнется там, где заканчивается навигационная панель, но это свойство будет определять, какие стороны вида (верхняя, левая, нижняя, правая) могут быть расширены для заполнения всего экрана.
Давайте посмотрим на это на примере:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Здесь вы не устанавливаете значение edgesForExtendedLayout
, поэтому берется значение по умолчанию ( UIRectEdgeAll
), поэтому представление расширяет свой макет, чтобы заполнить весь экран.
Это результат:
Как видите, красный фон простирается за панелью навигации и строкой состояния.
Теперь вы собираетесь установить это значение UIRectEdgeNone
, поэтому вы говорите контроллеру вида не расширять вид, чтобы покрыть экран:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
И результат:
automaticallyAdjustsScrollViewInsets
Это свойство используется, когда ваше представление является UIScrollView
или похожим, например UITableView
. Вы хотите, чтобы ваша таблица начиналась там, где заканчивается панель навигации, потому что вы не увидите весь контент, если нет, но в то же время вы хотите, чтобы ваша таблица покрывала весь экран при прокрутке. В этом случае установка edgesForExtendedLayout
None не будет работать, потому что ваша таблица начнет прокручиваться в том месте, где заканчивается панель навигации, и не будет идти за ней.
Вот где это свойство пригодится, если вы позволите контроллеру представления автоматически корректировать вставки (устанавливая это свойство в YES, также значение по умолчанию), он добавит вставки в верхнюю часть таблицы, поэтому таблица начнется там, где происходит навигация. полоса заканчивается, но прокрутка покроет весь экран.
Это когда НЕТ:
И ДА (по умолчанию):
В обоих случаях таблица прокручивается за панелью навигации, но во втором случае (ДА) она запускается из-под панели навигации.
extendedLayoutIncludesOpaqueBars
Это значение является просто дополнением к предыдущим. По умолчанию для этого параметра установлено значение NO. Если строка состояния непрозрачна, представления не будут расширены для включения строки состояния, даже если вы расширили представление, чтобы покрыть его ( edgesForExtendedLayout
до UIRectEdgeAll
).
Если вы установите значение YES, это позволит представлению снова перейти под строку состояния.
Если что-то не понятно, напишите комментарий и я на него отвечу.
Как iOS узнает, что использовать UIScrollView?
iOS получает первое подпредставление в представлении ViewController, которое имеет индекс 0, и, если оно является подклассом, UIScrollView
применяет к нему объясненные свойства.
Конечно, это означает, что UITableViewController
работает по умолчанию (так как UITableView
это первый вид).