Baru-baru ini saya mengunduh Xcode 5 DP untuk menguji aplikasi saya di iOS 7. Hal pertama yang saya perhatikan dan konfirmasi adalah bahwa batas tampilan saya tidak selalu diubah ukurannya menjadi akun untuk bilah status dan bilah navigasi.
Di viewDidLayoutSubviews
, saya mencetak batas tampilan:
{{0, 0}, {320, 568}}
Ini menghasilkan konten saya yang muncul di bawah bilah navigasi dan bilah status.
Saya tahu saya bisa memperhitungkan ketinggian sendiri dengan mendapatkan ketinggian layar utama, mengurangi ketinggian bilah status dan tinggi bilah navigasi, tapi itu sepertinya pekerjaan tambahan yang tidak perlu.
Bagaimana saya bisa memperbaiki masalah ini?
Memperbarui:
Saya telah menemukan solusi untuk masalah khusus ini. Setel properti tembus bilah navigasi ke NO:
self.navigationController.navigationBar.translucent = NO;
Ini akan memperbaiki tampilan agar tidak dibingkai di bawah bilah navigasi dan bilah status.
Namun, saya belum menemukan perbaikan untuk kasus ini ketika Anda ingin bilah navigasi menjadi tembus. Sebagai contoh, melihat foto layar penuh, saya ingin memiliki panel navigasi transparan, dan tampilan yang akan dibingkai di bawahnya. Itu bekerja, tetapi ketika saya beralih menampilkan / menyembunyikan bilah navigasi, saya telah mengalami hasil yang lebih aneh. Subview pertama (a UIScrollView) mendapatkan batasannya y asalnya berubah setiap kali.
Jawaban:
Anda dapat mencapai ini dengan menerapkan properti baru yang disebut
edgesForExtendedLayout
di iOS7 SDK. Silakan tambahkan kode berikut untuk mencapai ini,Anda perlu menambahkan hal di atas dalam
-(void)viewDidLoad
metode Anda .Silakan lihat, apple doc
sumber
Anda tidak perlu menghitung seberapa jauh untuk menggeser semuanya, ada properti build untuk ini. Di Pembuat Antarmuka, sorot pengontrol tampilan Anda, lalu navigasikan ke inspektur atribut. Di sini Anda akan melihat beberapa kotak centang di sebelah kata "Extend Edges". Seperti yang Anda lihat, pada tangkapan layar pertama, pilihan default adalah konten muncul di bawah bilah atas dan bawah, tetapi tidak di bawah bilah buram, itulah sebabnya pengaturan gaya bilah agar tidak tembus bekerja untuk Anda.
Seperti yang dapat Anda lihat pada tangkapan layar pertama, ada dua elemen UI yang bersembunyi di bawah bilah navigasi. (Saya telah mengaktifkan wireframes di IB untuk menggambarkan hal ini) Elemen-elemen ini, sebuah UIButton dan UISegmentedControl keduanya memiliki asal "y" yang diatur ke nol, dan pengontrol tampilan diatur untuk memungkinkan konten di bawah bilah atas.
Tangkapan layar kedua ini menunjukkan apa yang terjadi ketika Anda membatalkan centang pada kotak "Di Bawah Bilah Atas". Seperti yang Anda lihat, tampilan pengontrol tampilan telah digeser ke bawah dengan tepat agar asalnya berada tepat di bawah bilah navigasi.
Ini juga dapat dicapai secara terprogram melalui penggunaan
-[UIViewController edgesForExtendedLayout]
. Berikut ini tautan ke referensi kelas untuk edgeForExtendedLayout , dan untuk UIRectEdgesumber
Saya membuat tampilan saya secara terprogram dan ini akhirnya berhasil untuk saya:
Sumber (di bagian topLayoutGuide di bagian bawah hal.39).
sumber
topLayoutGuide
adalah iOS7 saja.Solusi Swift 3 / Swift 4 yang juga berfungsi dengan file NIB / XIB di iOS 10+:
sumber
Jika Anda ingin tampilan memiliki bilah nav transparan (yang agak menyenangkan) Anda harus mengatur contentInset atau yang serupa.
Inilah cara saya melakukannya:
sumber
contentInset
adalah properti dariUIScrollView
. Bagaimana jika tampilan utama saya bukan subkelas dariUIScrollView
. Lalu bagaimana saya memperbaiki masalah yang tumpang tindih?edgesForExtendedLayout
melakukan trik untuk iOS 7. Namun, jika Anda membangun aplikasi di iOS 7 SDK dan menyebarkannya di iOS 6, bilah navigasi tampak transparan dan pandangan di bawahnya. Jadi, untuk memperbaikinya untuk iOS 7 maupun untuk iOS 6 lakukan ini:sumber
Di file aplikasi plist Anda tambahkan satu baris, sebut saja "Lihat tampilan bilah status berbasis-pengontrol" dan setel ke NO .
sumber
Trik paling sederhana adalah membuka file NIB dan melakukan dua langkah sederhana ini:
Dan hasilnya :
sumber
Solusi Cepat:
sumber
super.viewWillAppear(animated)
Saya ingin memperluas jawaban Stunner, dan menambahkan
if
pernyataan untuk memeriksa apakah itu iOS-7, karena ketika saya mengujinya di iOS 6 aplikasi saya akan macet.Penambahan akan menambahkan:
Jadi saya sarankan menambahkan metode ini ke
MyViewControler.m
file Anda :sumber
Cepat 3
sumber
Saya memiliki skenario di mana saya menggunakan BannerViewController yang ditulis oleh Apple untuk menampilkan iklan saya dan ScrollViewController yang tertanam dalam BannerViewController.
Untuk mencegah bilah navigasi menyembunyikan konten saya, saya harus membuat dua perubahan.
1) Ubah BannerViewController.m
2) Ubah ScrollViewContoller saya
Sekarang iklan ditampilkan dengan benar di bagian bawah tampilan alih-alih ditutupi oleh bilah Navigasi dan konten di atas tidak terpotong.
sumber
cukup atur kode berikut ini dalam tampilan akan muncul.
sumber
buat batasan untuk Top Layout seperti ini
sumber
Swift 4.2 - Xcode 10.0 - iOS 12.0:
sumber
Bagi saya, solusi paling sederhana adalah menambahkan dua kunci ke dalam plist
sumber
Tambahkan kunci "Lihat tampilan bilah status berbasis Kontroler" dari dropdownlist sebagai baris dalam
info.plist
. Sesuatu seperti ini:sumber
Saya memiliki masalah yang sama dengan aplikasi saya dengan iPads (armv7, armv7s, amr64) hanya dengan menghadirkan UIViewController lain dan setelah memberhentikan mereka pergi nav bar di bawah status bar ... Saya menghabiskan banyak waktu untuk menemukan solusi untuk itu. Saya menggunakan storyboard dan di InterfaceBuilder untuk UIViewController yang membuat saya mengatur Presentasi dari FullScreen -> Konteks Saat Ini dan itu memperbaiki masalah ini. Ini berfungsi di aplikasi saya hanya untuk iPads => iOS8.0 (pengujian dengan iOS8.1) dan untuk iPad dengan iOS 7.1 tidak berfungsi !!
sumber
Langkah-langkah Untuk Menyembunyikan bilah status di iOS 7:
1. Buka file info.plist aplikasi Anda.
2.Dan Atur, Lihat tampilan status berbasis pengontrol: Boolean NO
Semoga saya memecahkan masalah status bar .....
sumber
Dalam kasus saya memuat loadView () terputus
kode ini: self.edgesForExtendedLayout = UIRectEdgeNone
tapi setelah menghapus loadView () semuanya bekerja dengan baik
sumber