Mulai di iOS7, pengontrol tampilan menggunakan tata letak layar penuh secara default. Pada saat yang sama, Anda memiliki kontrol lebih besar tentang bagaimana menjabarkan pandangannya, dan itu dilakukan dengan properti-properti itu:
edgeForExtendedLayout
Pada dasarnya, dengan properti ini Anda mengatur sisi mana dari tampilan Anda dapat diperluas untuk mencakup seluruh layar. Bayangkan bahwa Anda mendorong UIViewController
a UINavigationController
. Ketika tampilan pengontrol tampilan diletakkan, itu akan mulai di mana bilah navigasi berakhir, tetapi properti ini akan mengatur sisi tampilan mana (atas, kiri, bawah, kanan) dapat diperluas untuk mengisi seluruh layar.
Mari kita lihat dengan sebuah contoh:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Di sini Anda tidak mengatur nilai edgesForExtendedLayout
, karena itu nilai default diambil ( UIRectEdgeAll
), sehingga tampilan memperluas tata letaknya untuk mengisi seluruh layar.
Ini hasilnya:
Seperti yang Anda lihat, latar belakang merah memanjang di belakang bilah navigasi dan bilah status.
Sekarang, Anda akan mengatur nilai itu UIRectEdgeNone
, jadi Anda memberi tahu pengontrol tampilan untuk tidak memperluas tampilan untuk menutupi layar:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Dan hasilnya:
secara otomatisAdjustsScrollViewInsets
Properti ini digunakan saat tampilan Anda UIScrollView
mirip atau mirip, seperti a UITableView
. Anda ingin meja Anda mulai di mana bilah navigasi berakhir, karena Anda tidak akan melihat seluruh konten jika tidak, tetapi pada saat yang sama Anda ingin meja Anda untuk menutupi seluruh layar saat menggulir. Dalam hal ini, pengaturan edgesForExtendedLayout
ke Tidak ada tidak akan berhasil karena meja Anda akan mulai menggulir di mana bilah navigasi berakhir dan itu tidak akan pergi di belakangnya.
Di sinilah properti ini sangat berguna, jika Anda membiarkan pengontrol tampilan secara otomatis menyesuaikan inset (mengatur properti ini ke YA, juga nilai default) itu akan menambahkan insets ke bagian atas tabel, sehingga tabel akan mulai di mana navigasi bilah berakhir, tetapi gulir akan menutupi seluruh layar.
Saat ini diatur ke TIDAK:
Dan YA (secara default):
Dalam kedua kasus, tabel bergulir di belakang bilah navigasi, tetapi dalam kasus kedua (YA), itu akan mulai dari bawah bilah navigasi.
extendedLayoutIncludeOpaqueBars
Nilai ini hanyalah tambahan dari yang sebelumnya. Secara default, parameter ini diatur ke NO. Jika status bar buram, pandangan tidak akan diperluas untuk mencakup status bar, bahkan jika Anda memperpanjang tampilan Anda untuk menutupi itu ( edgesForExtendedLayout
untuk UIRectEdgeAll
).
Jika Anda menetapkan nilai ke YA, ini akan memungkinkan tampilan untuk pergi di bawah bilah status lagi.
Jika ada sesuatu yang tidak jelas, tulis komentar dan saya akan menjawabnya.
Bagaimana iOS mengetahui UIScrollView apa yang akan digunakan?
iOS meraih subview pertama dalam tampilan ViewController Anda, yang ada di indeks 0, dan jika itu adalah subkelas UIScrollView
maka berlaku properti yang dijelaskan untuk itu.
Tentu saja, ini berarti itu UITableViewController
berfungsi secara default (karena UITableView
ini adalah tampilan pertama).