Saya ingin menampilkan, di atas tampilan lain, bahkan bilah navigasi, sejenis tampilan "pop-up" yang terlihat seperti ini:
- layar penuh latar belakang hitam dengan 0,5 alpha untuk melihat yang lain di
UIViewController
bawahnya. - sebuah
UIView
jendela di tengah dengan beberapa informasi, (kalender jika Anda ingin tahu segalanya).
Untuk melakukan itu, saya telah membuat UIViewController yang berisi keduanya UIViews
(latar belakang dan jendela), dan saya mencoba untuk menampilkannya. Saya sudah mencoba yang sederhana [mySuperVC addSubview:myPopUpVC.view]
, tetapi saya masih memiliki bilah navigasi di atas.
Saya sudah mencoba menyajikannya sebagai modal, tetapi di UIViewController
bawahnya menghilang, dan saya kehilangan efek transparansi saya.
Ada ide untuk melakukan ini, saya yakin itu cukup sederhana ...
Terima kasih!
ios
uiviewcontroller
uinavigationbar
popupwindow
Nicolas Roy
sumber
sumber
Jawaban:
Anda dapat melakukannya dengan menambahkan tampilan Anda langsung ke keyWindow:
UPDATE - Untuk Swift 4.1 ke atas
sumber
[self.navigationController.view addSubview:overlayView];
adalah apa yang Anda inginkansumber
Berikut adalah solusi elegan sederhana yang berfungsi untuk saya. Anda dapat mengatur posisi z bilah navigasi ke bawah tampilan:
Hanya ingat untuk mengaturnya kembali ke 0 setelah selesai.
sumber
Versi cepat untuk respons yang diperiksa:
Swift 4:
Swift 3.1:
sumber
Tambahkan tampilan Anda sebagai subview dari NavigationController.
Anda juga dapat menambahkannya di jendela:
Semoga ini membantu.. :)
sumber
let navigationBar = viewController.navigationController!.navigationBar navigationBar.addSubview(coverView)
Dalef solusi hebat dalam cepat:
sumber
@ Nam's answer berfungsi dengan baik jika Anda hanya ingin menampilkan tampilan khusus Anda tetapi jika tampilan khusus Anda memerlukan interaksi pengguna, Anda perlu menonaktifkan interaksi untuk
navigationBar
.Seperti yang dikatakan dalam jawaban Nam jangan lupa untuk membalikkan perubahan ini:
Anda dapat melakukan ini dengan cara yang lebih baik dengan ekstensi:
Dan cukup gunakan seperti ini:
sumber
Versi cepat jawaban @Nicolas Bonnet:
Jangan lupa bahwa jendela itu haruslah properti yang kuat, karena jawaban aslinya mengarah ke deallokasi jendela dengan segera
sumber
Saya sarankan Anda untuk membuat UIWindow baru:
Kemudian Anda dapat mengelola tampilan Anda di UIViewController lainnya. Untuk menghapus windows:
berharap itu akan membantu!
sumber
Ada lebih dari satu cara untuk melakukannya:
1- Tambahkan
UIView
padaUIWindow
bukannya menambahkan padaUIViewController
. Dengan cara ini akan berada di atas segalanya.2- Gunakan transisi khusus yang akan membuat UIViewController Anda ditampilkan di belakang dengan 0,5 alpha
Untuk itu saya sarankan Anda melihat ini: https://github.com/Citrrus/BlurryModalSegue
sumber
sumber
Di Swift 4.2 dan Xcode 10
Dalam Tujuan C
UIView * spinnerView; // Ini adalah pandangan Anda
Ini hanya bisa berfungsi mode Portrait atau Landscape.
Satu lagi kode sederhana adalah:
sumber
Catatan jika Anda ingin menambahkan tampilan dalam layar penuh maka hanya gunakan kode di bawah ini
Tambahkan ekstensi ini dari UIViewController
Lanjutkan seperti biasa menambahkan proses subview
Sekarang gunakan dalam menambahkan viewDidAppear UIViewController's
sumber
Saya akan menggunakan subkelas UIViewController yang berisi "Tampilan Kontainer" yang menyematkan pengendali tampilan orang lain. Anda kemudian dapat menambahkan pengontrol navigasi di dalam Tampilan Kontainer (misalnya dengan menggunakan hubungan sematan embed).
Lihat Menerapkan Pengendali Tampilan Kontainer
sumber
Metode ini bekerja dengan xcode 9.4, iOS 11.4
sumber
sumber
Anda perlu menambahkan subview ke jendela pertama dengan tipe UITextEffectsWindow. Ke yang pertama, karena keyboard khusus menambahkan UITextEffectsWindow mereka, dan jika Anda menambahkan subview, ini tidak akan berfungsi dengan benar. Selain itu, Anda tidak dapat menambahkan subview ke jendela terakhir karena keyboard, misalnya, juga merupakan jendela dan Anda tidak dapat hadir dari jendela keyboard. Jadi solusi terbaik yang saya temukan adalah menambahkan subview (atau bahkan push view controller) ke jendela pertama dengan tipe UITextEffectsWindow, jendela ini mencakup tampilan aksesori, navbar - segalanya.
sumber