Di iOS 13 ada perilaku baru untuk pengontrol tampilan modal saat disajikan.
Sekarang ini bukan layar penuh secara default dan ketika saya mencoba untuk meluncur ke bawah, aplikasi hanya mengabaikan View Controller secara otomatis.
Bagaimana saya bisa mencegah perilaku ini dan kembali ke modal fullscreen lama vc?
Terima kasih
ios
viewcontroller
modalviewcontroller
ios13
pascalbros
sumber
sumber
fullScreen
pilihan harus menjadi default untuk mencegah perubahan UI melanggar.isModalInPresentation
untuk memblokir gerakan menggesek agar tidak menghilang. Lihat posting blog saya untuk lebih jelasnya: medium.com/@hacknicity/….automatic
gaya telah ditetapkan sebagai gaya default, yaitu gaya (untuk sebagian besar pengontrol tampilan).pageSheet
. Namun beberapa pengontrol tampilan sistem dapat memetakannya ke gaya yang berbeda.Saya menambahkan informasi yang dapat bermanfaat bagi seseorang. Jika Anda memiliki segue papan cerita, untuk kembali ke gaya lama, Anda perlu mengatur properti jenis ke Present Modally dan Presentation properti ke Layar Penuh .
sumber
performSegue
. Terima kasih sayang!Saya memiliki masalah ini pada tampilan awal setelah layar peluncuran. Perbaikan untuk saya karena saya tidak memiliki segue atau logika yang ditentukan adalah untuk mengubah presentasi dari otomatis ke layar penuh seperti yang ditunjukkan di sini:
sumber
Ada banyak cara untuk melakukan itu, dan saya pikir masing-masing bisa cocok untuk satu proyek tetapi tidak yang lain, jadi saya pikir saya akan menyimpannya di sini mungkin orang lain akan lari ke kasus yang berbeda.
1- Timpa yang ada
Jika sudah,
BaseViewController
Anda dapat menggantipresent(_ viewControllerToPresent: animated flag: completion:)
metode.Dengan menggunakan cara ini Anda tidak perlu melakukan perubahan apa pun pada
present
panggilan apa pun , karena kami hanya mengesampingkanpresent
metode ini.2- Perpanjangan:
Pemakaian:
3- Untuk satu UIViewController
4- Dari Storyboard
Pilih segue dan atur presentasi ke
FullScreen
.5-swizzling
Penggunaan:
Di
AppDelegate
bagian dalam Andaapplication(_ application: didFinishLaunchingWithOptions)
tambahkan baris ini:Dengan menggunakan cara ini Anda tidak perlu melakukan perubahan apa pun pada panggilan saat ini, karena kami mengganti implementasi metode saat ini di runtime.
Jika Anda perlu tahu apa yang membingungkan Anda dapat memeriksa tautan ini: https://nshipster.com/swift-objc-runtime/
sumber
Saya menggunakan swizzling untuk ios 13
lalu taruh ini
suatu tempat
misalnya di AppDelegate
sumber
static let
malas, Anda harus membacanya untuk membiarkannya dihitung, lazy var dihitung hanya sekali, saya menggunakannya untuk memiliki jaminan bahwa swizzling disebut sekaliUntuk pengguna Objective-C
Gunakan saja kode ini
Atau jika Anda ingin menambahkannya di iOS 13.0 kemudian gunakan
sumber
Satu Liner:
modalPresentationStyle
diperlukan untuk diatur pada navigationController yang sedang disajikan .Kode yang Diuji
modalPresentationStyle perlu diatur di navigationController .
sumber
Sebagai petunjuk: Jika Anda memanggil hadiah
ViewController
yang tertanam di dalamnya,NavigationController
Anda harus menyetelNavigationController
ke.fullScreen
dan bukan VC.Anda dapat melakukan ini seperti @davidbates atau Anda melakukannya secara terprogram (seperti @pascalbros).
Contoh skenario:
sumber
Saya perlu melakukan keduanya:
Tetapkan gaya presentasi sebagai Layar penuh
Setel bilah Top sebagai Bilah Navigasi Tembus
sumber
Ubah
modalPresentationStyle
sebelum presentasisumber
Ini adalah solusi mudah tanpa mengkode satu baris pun.
Perubahan ini membuat perilaku aplikasi iPad seperti yang diharapkan jika tidak, layar baru ditampilkan di tengah layar sebagai popup.
sumber
Jika Anda memiliki UITabController dengan Layar dengan Pengontrol Navigasi Sematan, Anda harus mengatur Presentasi UITabController ke Layar Penuh seperti yang ditunjukkan pada gambar di bawah ini
sumber
Ini solusi untuk Objective-C
sumber
Terbaru untuk iOS 13 dan Swift 5.x
sumber
Ini versi perbaikan saya di ObjectiveC menggunakan Categories. Dengan pendekatan ini Anda akan memiliki perilaku UIModalPresentationStyleFullScreen default hingga yang lain secara eksplisit ditetapkan.
sumber
Semua jawaban lain sudah cukup tetapi untuk proyek besar seperti kami dan di mana navigasi dilakukan baik dalam kode dan storyboard, itu adalah tugas yang cukup menakutkan.
Bagi mereka yang aktif menggunakan Storyboard. Ini saran saya: gunakan Regex.
Format berikut tidak bagus untuk halaman layar penuh:
Format berikut bagus untuk halaman layar penuh:
Regex berikut yang kompatibel dengan VS CODE akan mengkonversi semua halaman Gaya Lama ke halaman gaya baru. Anda mungkin perlu keluar dari karakter khusus jika Anda menggunakan mesin regex / editor teks lainnya.
Cari Regex
Ganti Regex
sumber
Awalnya, nilai default adalah
fullscreen
untuk modalPresentationStyle, tetapi di iOS 13 perubahan keUIModalPresentationStyle.automatic
.Jika Anda ingin membuat pengontrol tampilan layar penuh, Anda harus mengubah
modalPresentationStyle
kefullScreen
.Lihat
UIModalPresentationStyle
dokumentasi apel untuk detail lebih lanjut dan lihat pedoman antarmuka manusia apel untuk mana harus menggunakan modalitas mana.sumber
Anda dapat dengan mudah melakukannya Buka storyboard Anda sebagai kode sumber dan cari
kind="presentation"
, di semua tag seague dengan kind = presentasi tambahkan atribut tambahanmodalPresentationStyle="fullScreen"
sumber
// jika Anda ingin menonaktifkan swipe untuk mengabaikannya, tambahkan baris
Periksa Dokumen Apple untuk info lebih lanjut.
sumber
Saya mencapainya dengan menggunakan metode swizzling (Swift 4.2):
Untuk membuat ekstensi UIViewController sebagai berikut
dan di AppDelegate, dalam aplikasi: didFinishLaunchingWithOptions: aktifkan kode swizzling dengan memanggil:
sumber
Ini bekerja untuk saya:
yourViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
sumber
Buat kategori untuk UIViewController (mis. UIViewController + PresentationStyle). Tambahkan kode berikut ke dalamnya.
sumber
pendekatan alternatif adalah memiliki komponen base viewcontroller Anda sendiri di aplikasi Anda, dan hanya menerapkan inisialisasi yang ditunjuk dan diperlukan dengan pengaturan dasar, sesuatu seperti berikut:
CATATAN : Jika pengontrol tampilan Anda terdapat di pengontrol navigasi yang sebenarnya disajikan secara moda, maka pengontrol navigasi harus mendekati masalah dengan cara yang sama (artinya, membuat komponen pengontrol navigasi kustom Anda disesuaikan dengan cara yang sama
Diuji pada Xcode 11.1 di iOS 13.1 dan iOS 12.4
Semoga ini bisa membantu
sumber
Saya punya masalah dengan video yang tidak menampilkan layar penuh lagi. Menambahkan baris ini, yang menyelamatkan hari :-)
sumber
Solusi paling sederhana yang bekerja untuk saya.
sumber
Jika Anda menggunakan UINavigationController dan menanamkan ViewController sebagai pengontrol tampilan root, maka Anda juga akan bangkit dengan masalah yang sama. Gunakan kode berikut untuk mengatasinya.
sumber
Daripada memanggil
self.modalPresentationStyle = .fullScreen
untuk setiap tampilan controller, Anda dapat subclass UIViewController dan cukup gunakan diMyViewController
mana-mana.sumber
Jawaban dan saran di atas benar, di bawah ini adalah versi lain, dan cara efisien menggunakan program.
# 1 Membuat Ekstensi UIView
# 2 Membuat Metode ()
Memohon seperti di bawah ini
ATAU
sumber