Saya tahu bahwa kehadiran lebih banyak pengontrol tampilan (bilah navigasi) menekan UIView dengan ketinggiannya. Saya juga tahu bahwa tinggi ini = 44px. Saya juga menemukan bahwa ini menekan mempertahankan [self.view].frame.origin.y = 0
.
Jadi, bagaimana cara menentukan ketinggian bilah navigasi ini, selain hanya mengaturnya ke konstanta?
Atau, versi yang lebih pendek, bagaimana saya menentukan bahwa UIView saya ditampilkan dengan bilah navigasi di atas?
Bola lampu mulai menyala. Sayangnya, saya belum menemukan cara yang seragam untuk memperbaiki masalah, seperti dijelaskan di bawah ini.
Saya percaya bahwa seluruh masalah saya terpusat pada AutoresizingMasks saya. Dan alasan saya menyimpulkan bahwa ada gejala yang sama, dengan atau tanpa UIWebView. Dan gejala itu adalah bahwa segala sesuatu sangat bagus untuk Potret. Untuk Landscape, UIButton paling bawah muncul di belakang TabBar.
Misalnya, pada satu UIView, saya punya, dari atas ke bawah:
UIView - kedua pegas diatur (case default) dan tidak ada struts
UIScrollView - Jika saya mengatur dua pegas, dan menghapus semua yang lain (seperti UIView), maka UIButton mengganggu objek tepat di atasnya. Jika saya menghapus semuanya, maka UIButton OK, tetapi hal-hal di bagian paling atas bersembunyi di balik StatusBar Pengaturan hanya penyangga teratas, UIButton muncul di belakang Tab Bar.
UILabel dan UIImage selanjutnya vertikal - top strut set, fleksibel di mana pun
Hanya untuk melengkapi gambar untuk beberapa yang memiliki UIWebView:
UIWebView - Struts: atas, kiri, kanan Pegas: keduanya
UIButton - tidak ada yang ditetapkan, yaitu fleksibel di mana-mana
Meskipun bola lampu saya redup, tampaknya ada harapan.
Mohon bersabar karena saya membutuhkan lebih banyak ruang daripada yang disediakan untuk komentar balasan singkat.
Terima kasih telah mencoba memahami apa yang sebenarnya saya tangkap ... jadi begini.
1) Setiap UIViewController (aplikasi TabBar) memiliki UIImage, beberapa teks, dan apa pun di atasnya. Penyebut umum lainnya adalah tombol UIB di bagian bawah. Pada beberapa UIViewControllers saya memiliki UIWebView di atas UIButton.
Jadi, UIImage, teks dll. UIWebView (on BEBERAPA) UIButton
Yang mengelilingi semua di atas adalah UIScrollView.
2) Bagi yang memiliki UIWebView, autoresizingMask-nya terlihat seperti:
—
|
—
^
|
|
| - | ← ---- → | - | | | V Topeng UIButton tidak memiliki set, yaitu fleksibel di mana-mana
Di dalam -viewDidLoad saya, saya memanggil -repositionSubViews tempat saya melakukan hal berikut:
Jika tidak ada UIWebView, saya tidak melakukan apa pun kecuali memusatkan UIButton yang saya tempatkan dengan IB.
Jika saya memiliki UIWebView, maka saya menentukan * konten * Tinggi dan mengatur bingkainya untuk melampirkan seluruh konten.
UIScrollView *scrollViewInsideWebView = [[webView_ subviews] lastObject];
webViewContentHeight = scrollViewInsideWebView.contentSize.height;
[webView_ setFrame:CGRectMake(webViewOriginX, webViewOriginY,
sameWholeViewScrollerWidth, webViewContentHeight)]
Setelah saya melakukan itu, maka saya secara pemrograman menekan tombol UIB ke bawah sehingga akhirnya ditempatkan di bawah UIWebView.
Semuanya berfungsi, sampai saya memutarnya dari Portrait ke Landscape.
Saya memanggil -reposisiSubViews saya dalam -didRotateFromInterfaceOrientation.
Mengapa ketinggian konten UIWebView saya tidak berubah dengan rotasi ?.
Dari Portrait ke Landscape, lebar konten harus membesar dan tinggi konten harus menyusut. Secara visual memang sebagaimana mestinya, tetapi tidak menurut NSLog saya.
Lagi pula, dengan atau tanpa UIWebView, tombol yang saya bicarakan bergerak di bawah TabBar ketika dalam mode Lansekap tetapi tidak akan menggulir ke atas untuk dilihat. Saya melihatnya di belakang TabBar ketika saya gulir "penuh semangat", tetapi kemudian "jatuh kembali" di belakang TabBar.
Intinya, yang terakhir ini adalah alasan saya bertanya tentang ketinggian TabBar dan NavigationBar karena TabBar menanam sendiri di bagian bawah UIView dan NavigationBar mendorong UIView ke bawah.
Sekarang, saya akan menambahkan satu atau dua komentar di sini karena mereka tidak akan masuk akal sebelumnya.
Tanpa UIWebView, saya membiarkan semuanya seperti yang terlihat oleh IB.
Dengan UIWebView, saya meningkatkan frame UIWebView. Tinggi ke contentHeight dan juga menyesuaikan ke atas ketinggian UIScrollView sekitarnya yang mengelilingi semua sub-tampilan.
Nah begitulah.
Dengan iPhone-X, ketinggian bilah atas (bilah navigasi + bilah status) diubah (meningkat).
Coba ini jika Anda ingin ketinggian bar bagian atas (kedua bar navigasi + status bar):
MEMPERBARUI
iOS 13
Karena
statusBarFrame
sudah usang,iOS13
Anda dapat menggunakan ini:Objektif-C
Cepat 4
Untuk memudahkan, coba ekstensi UIViewController ini
Cepat 3
sumber
Swift versi:
sumber
Apakah kamu mencoba ini?
sumber
Mendukung iOS 13 dan Bawah:
sumber
Jadi sebenarnya yang kita butuhkan adalah
sumber
Aplikasi saya memiliki beberapa tampilan yang memerlukan bilah navigasi khusus di UI untuk tampilan & nuansa, namun tanpa pengontrol navigasi. Dan aplikasi ini diperlukan untuk mendukung versi iOS sebelum iOS 11, sehingga panduan tata letak area aman yang praktis tidak dapat digunakan, dan saya harus menyesuaikan posisi dan ketinggian bilah navigasi secara terprogram.
Saya memasang Bilah Navigasi ke superview secara langsung, melewatkan panduan tata letak area aman seperti yang disebutkan di atas. Dan ketinggian bilah status dapat diambil dari aplikasi UIA dengan mudah, tetapi ketinggian bilah navigasi standar benar-benar ...
Saya tersadar hampir setengah malam, dengan sejumlah pencarian dan pengujian, sampai saya akhirnya mendapatkan petunjuk dari pos lain (meskipun tidak bekerja untuk saya), bahwa Anda benar-benar bisa mendapatkan ketinggian dari UIView.sizeThatFits (), seperti ini :
Terakhir, bilah navigasi sempurna yang persis sama dengan bilah bawaan!
sumber
Jika Anda ingin mendapatkan
navigationBar
ketinggian saja, sederhana:Namun, jika Anda membutuhkan tinggi kedudukan tertinggi iPhone Anda tidak perlu mendapatkan
navigationBar
tinggi dan menambahstatusBar
tinggi, Anda dapat memanggilsafeAreaInsets
itu sebabnya ada.sumber
Bola lampu mulai menyala. Sayangnya, saya belum menemukan cara yang seragam untuk memperbaiki masalah, seperti dijelaskan di bawah ini.
Saya percaya bahwa seluruh masalah saya terpusat pada AutoresizingMasks saya. Dan alasan saya menyimpulkan bahwa ada gejala yang sama, dengan atau tanpa UIWebView. Dan gejala itu adalah bahwa segala sesuatu sangat bagus untuk Potret. Untuk Landscape, UIButton paling bawah muncul di belakang TabBar.
Misalnya, pada satu UIView, saya punya, dari atas ke bawah:
UIView - kedua pegas diatur (case default) dan tidak ada struts
UIScrollView - Jika saya mengatur dua pegas, dan menghapus semua yang lain (seperti UIView), maka UIButton mengganggu objek tepat di atasnya. Jika saya menghapus semuanya, maka UIButton OK, tetapi hal-hal di bagian paling atas bersembunyi di balik StatusBar Pengaturan hanya penyangga teratas, UIButton muncul di belakang Tab Bar.
UILabel dan UIImage selanjutnya vertikal - top strut set, fleksibel di mana pun
Hanya untuk melengkapi gambar untuk beberapa yang memiliki UIWebView:
UIWebView - Struts: atas, kiri, kanan Pegas: keduanya
UIButton - tidak ada yang ditetapkan, yaitu fleksibel di mana-mana
Meskipun bola lampu saya redup, tampaknya ada harapan.
sumber
Inilah awal tanggapan saya terhadap pembaruan Anda:
Mungkinkah karena ukuran otomatis Anda tidak memiliki autoresizingMask untuk semua arah?
Saran lain sebelum saya kembali untuk ini, dapatkah Anda menggunakan toolbar untuk kebutuhan Anda. Ini sedikit lebih sederhana, akan selalu di bagian bawah, otomatis berputar / posisi. Anda dapat menyembunyikan / menampilkannya sesuka hati dll. Jenis seperti ini: http://cdn.artoftheiphone.com/wp-content/uploads/2009/01/yellow-pages-iphone-app-2.jpg
Anda mungkin telah melihat opsi itu, tetapi hanya membuangnya di sana.
Gagasan lain, dapatkah Anda mendeteksi orientasi yang Anda putar, dan letakkan tombol secara terprogram untuk menyesuaikan bilah tab. (Ini mungkin dengan kode)
sumber
Saya telah menggunakan:
Bekerja dengan baik jika Anda ingin mendapatkan ketinggian bilah navigasi DAN asal Y-nya.
sumber
Cepat 5
Jika Anda ingin mempertimbangkan safeArea juga:
sumber
Ekstensi Handy Swift 4, jika bermanfaat bagi orang lain. Bekerja bahkan jika pengontrol tampilan saat ini tidak menampilkan bilah navigasi.
Pemakaian:
sumber