Bagaimana cara mendeteksi model perangkat dengan makro? saya telah menggunakan sesuatu seperti ini tetapi hasilnya pada simulator selalu IS_IPHONE_5
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)
Jawaban:
Cepat
Lihat aksinya https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346
Catatan: Jika misalnya iPhone 6 dalam mode yang diperbesar, UI adalah versi yang diperbesar dari iPhone 5. Fungsi ini tidak menentukan jenis perangkat, tetapi mode tampilan, maka iPhone 5 adalah hasil yang diinginkan dalam contoh ini.
Objective-C
Penggunaan: http://pastie.org/9687735
Catatan: Jika misalnya iPhone 6 dalam mode yang diperbesar, UI adalah versi yang diperbesar dari iPhone 5. Fungsi ini tidak menentukan jenis perangkat, tetapi mode tampilan, maka iPhone 5 adalah hasil yang diinginkan dalam contoh ini.
sumber
Untuk Swift:
sumber
sumber
IS_IPHONE_6_IOS7
danIS_IPHONE_6P_IOS7
tidak diperlukan, iPhone 6 (+) hanya bisa di iOS 8 ke atas.sumber
nativeBounds
lebih baik digunakan daripadabounds
. IPhone 6 dengan Display Zoom on akan melaporkan 568 untuk bounds.height, tetapi 1334 untuk nativeBounds.height, meskipun Display Zoom tidak memiliki efek apa pun di dalam aplikasi. ( support.apple.com/en-us/HT203073 )Saya menggunakan kelas yang menarik info sistem aktual. Hanya perlu memastikan semua jenis perangkat adalah yang terbaru.
sumber
Saya dapat mengonfirmasi bahwa bug itu hilang ketika Anda mengatur Layar Peluncuran.
Saya menyimpan gambar peluncuran saya, dan menambahkan MainStoryboard ke Layar Peluncuran dan simulator mengenali perangkat dengan benar.
sumber
Lebih baik tidak mengikat kode Anda dengan jenis perangkat. Ini akan menyebabkan masalah berbelit-belit yang tidak fleksibel. Apple ingin Anda memikirkan ukuran, bukan perangkat. Jika Anda perlu memiliki ukuran khusus untuk perangkat yang lebih besar dari iPhone 5 seperti gambar atau ukuran font, saya akan merekomendasikan untuk membuat kelas normalisasi dengan pengganda yang memperbesar ukuran dasar Anda dengan persentase tertentu berdasarkan hubungan antara layar iPhone 5 lebar dan ukuran perangkat saat ini.
Jadi dalam kode Anda, Anda akan melakukan hal seperti itu:
sumber
static normalize
?Ekstensi UIDeivce dengan sintaks Swift 3+ .
Penggunaan sampel:
Jawaban asli: https://stackoverflow.com/a/36479017/3659227
sumber
Perbarui Xcode 11 / Swift 5.1:
Hai, saya memperbarui ke Xcode10 / Swift 4.2 dan ukuran baru untuk iPhone XS / XSMAX / XR
dengan deteksi Notch-IPhones.
Semoga ini bisa membantu seseorang.
}
sumber
Saya mengalami masalah saat bermigrasi dari proyek iOS 7 ke proyek iOS 8, karena saya tidak menambahkan adegan layar peluncuran ke proyek saya.
Dalam hal ini ukuran layar untuk iPhone 6 dan 6+ sama dengan iPhone 5.
Lihat dari dokumentasi apple; Anda menggunakan file XIB atau storyboard peluncuran untuk menunjukkan bahwa aplikasi Anda berjalan di iPhone 6 Plus atau iPhone 6.
sumber
sumber
Sebagai tambahan, Anda juga harus memeriksa zoom
sumber
sumber