Aplikasi saya (iPad; iOS 6) adalah aplikasi khusus lanskap, tetapi ketika saya mencoba menggunakan UIPopoverController untuk menampilkan perpustakaan foto, kesalahan ini muncul:
Supported orientations has no common orientation with the application, and shouldAutorotate is returning YES.
Saya telah mencoba mengubah banyak kode tetapi saya tidak berhasil.
ipad
uipopovercontroller
landscape
ios6
Destiny Dawn
sumber
sumber
Jawaban:
Di IOS6 Anda telah mendukung orientasi antarmuka di tiga tempat:
Jika Anda mendapatkan kesalahan ini, kemungkinan besar karena tampilan yang Anda muat di UIPopover Anda hanya mendukung mode potret. Ini bisa disebabkan oleh Game Center, iAd, atau pandangan Anda sendiri.
Jika ini adalah tampilan Anda sendiri, Anda dapat memperbaikinya dengan mengganti supportInterfaceOrientations yang didukung di UIViewController Anda:
Jika ini bukan tampilan Anda sendiri (seperti GameCenter di iPhone), Anda perlu memastikan .plist Anda mendukung mode potret. Anda juga perlu memastikan UIApplicationDelegate Anda mendukung tampilan yang ditampilkan dalam mode potret. Anda dapat melakukan ini dengan mengedit .plist Anda dan kemudian menimpaInterfaceOrientation yang didukung di UIApplicationDelegate Anda:
sumber
UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
samaUIInterfaceOrientationMaskAllButUpsideDown
UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight
denganUIInterfaceOrientationMaskLandscape
Setelah menghabiskan banyak waktu mencari cara untuk menghindari subclass dan menambahkan banyak kode, inilah solusi kode satu baris saya.
Buat kategori baru UIImagePickerController dan tambahkan
Itu semua orang!
sumber
Ada kasus lain pesan kesalahan ini mungkin muncul. Saya mencari berjam-jam sampai saya menemukan masalahnya. Utas ini sangat membantu setelah membacanya beberapa kali.
Jika pengontrol tampilan utama Anda diputar ke orientasi lanskap dan Anda menjalankan pengontrol sub tampilan kustom yang harus ditampilkan dalam orientasi potret, pesan kesalahan ini dapat terjadi jika kode Anda terlihat seperti ini:
Perangkap di sini adalah intellisense xcode yang disarankan "UIInterfaceOrientationPortrait" dan saya tidak peduli tentang itu. Sekilas ini sepertinya benar.
Nama topeng yang tepat
Waspadai infix kecil "Mask" , jika tidak subview Anda akan berakhir dengan pengecualian dan pesan kesalahan yang disebutkan di atas.
Enum baru sedikit bergeser. Enum lama mengembalikan nilai yang tidak valid!
(di UIApplication.h Anda bisa melihat deklarasi baru: UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait) )
Solusinya adalah:
Digunakan dengan cepat
sumber
Saya mengalami masalah serupa saat menampilkan alat pilih gambar dalam aplikasi lanskap saja. Seperti yang disarankan oleh Dr. Luiji, saya menambahkan kategori berikut di awal pengontrol saya.
Paling mudah menambahkan baris ini tepat sebelum @implementation dari file ViewController .m Anda.
sumber
Saya menemukan pesan kesalahan yang sama dalam kode saya. Saya menemukan ini, itu bug seperti yang dilaporkan oleh Apple:
https://devforums.apple.com/message/731764#731764
Solusinya adalah memperbaikinya di AppDelegate. Saya menerapkannya dan berhasil untuk saya!
sumber
Saya memiliki masalah yang sama dan jawaban ini https://stackoverflow.com/a/12523916 bekerja untuk saya. Bertanya-tanya apakah ada solusi yang lebih elegan.
Kode saya:
sumber
@interface NonRotatingUIImagePickerController : UIImagePickerController @end @implementation NonRotatingUIImagePickerController - (BOOL)shouldAutorotate { return NO; } @end
kode tetapi kode saya tidak mendeteksi NonRotatingUIImagePickerController.iOS 8 - Anda dapat menggunakan UIModalPresentationPopover tanpa peretasan apa pun untuk ditampilkan di popover. Tidak ideal tapi lebih baik daripada tidak sama sekali.
Sunting: mungkin coba UIModalPresentationStyles yang berbeda - mungkin lebih banyak yang akan bekerja dalam lanskap.
sumber
sumber
Opsi lain yang menyelesaikan masalah saya adalah membuat subclass UIImagePickerController dan mengganti metode di bawah ini
Gunakan ini sebagai ganti UIImagePickerController dan semuanya berfungsi dengan baik.
sumber
Membuat kategori sangat membantu untuk memperbaiki bug ini. Dan jangan lupa untuk mengimpor kategori yang Anda buat. Ini akan menambahkan metode yang hilang ke UIImagePickerController dan di iOS 6 itu akan membatasinya untuk bekerja di Portrait hanya sebagai dokumentasi menyatakan btw.
Solusi lain mungkin berhasil. Tetapi dengan SDK untuk iOS 8.x yang dikompilasi untuk diterapkan pada iOS 6.1 ini tampaknya cara untuk pergi.
File .h:
File .m:
sumber
Cepat 3
sumber
Saya mengalami masalah mogok ini saat mengonversi
UIInterfaceOrientationPortrait
menjadiUIInterfaceOrientationMaskPortrait
secara implisit sebagai nilai kembali.Lebih banyak latar belakang kode
UIPageViewControllerDelegate
, hanya FYI untuk Anda semua.sumber
Saya baru saja menyelesaikan masalah untuk Swift 4.x
Terima kasih teman-teman atas jawaban Anda juga. Saya baru saja memotong kode yang berfungsi dan hanya memfaktorkan ulangnya.
sumber
Swift 4 dan yang lebih baru dengan asumsi seluruh aplikasi dalam lanskap dan Anda perlu menampilkan satu pengontrol dalam mode potret. Dalam pengontrol tampilan yang harus potret tambahkan yang berikut ini:
sumber