Починаючи з iOS7, контролери перегляду використовують за замовчуванням макет на весь екран. У той же час ви маєте більше контролю над тим, як він викладає свої погляди, і це робиться з тими властивостями:
edgeForExtendedLayout
В основному за допомогою цього властивості ви встановлюєте, які сторони вашого перегляду можна розширити, щоб охопити весь екран. Уявіть, що ви натискаєте UIViewController
на a 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];
І результат:
автоматичноAdjustsScrollViewInsets
Ця властивість використовується , коли ваша точка зору є UIScrollView
або подібними, ніби UITableView
. Ви хочете, щоб ваша таблиця починалася там, де закінчується панель навігації, оскільки ви не бачите весь вміст, якщо ні, але в той же час ви хочете, щоб ваша таблиця охоплювала весь екран під час прокрутки. У такому випадку встановлення edgesForExtendedLayout
значення None не працюватиме, оскільки ваша таблиця почне прокручуватися там, де закінчується панель навігації, і вона не буде йти за нею.
Ось, де ця властивість стане в нагоді, якщо ви дозволите контролеру перегляду автоматично налаштувати вставки (встановивши це властивість на ТАК, також значення за замовчуванням), воно додасть вставки вгорі таблиці, тому таблиця почне починатися з навігації смужка закінчується, але прокрутка охопить увесь екран.
Це коли встановлено значення NO:
І ТАК (за замовчуванням):
В обох випадках таблиця прокручується за панеллю навігації, але у другому випадку (ТАК) вона почне знизу навігаційної панелі.
extensionLayoutIncludesOpaqueBars
Це значення є лише доповненням до попередніх. За замовчуванням для цього параметра встановлено значення NO. Якщо рядок стану непрозорий, представлення даних не буде розширено, щоб включити рядок стану, навіть якщо ви розширите свій погляд, щоб охопити його ( edgesForExtendedLayout
до UIRectEdgeAll
).
Якщо встановити значення YES, це дозволить перегляду знову перейти під рядок стану.
Якщо щось не зрозуміло, напишіть коментар, і я відповім на нього.
Як iOS знає, що UIScrollView використовувати?
iOS захоплює перший підпогляд у представленні вашого ViewController, той, який знаходиться в індексі 0, і якщо це підклас, UIScrollView
тоді застосовує до нього пояснені властивості.
Звичайно, це означає, що UITableViewController
працює за замовчуванням (оскільки UITableView
це перший погляд).