Bagaimana seseorang bisa mendapatkan dimensi layar di iOS?
Masalah dengan kode yang Anda poskan adalah bahwa Anda mengandalkan ukuran tampilan untuk mencocokkan dengan layar, dan seperti yang Anda lihat tidak selalu demikian. Jika Anda membutuhkan ukuran layar, Anda harus melihat objek yang mewakili layar itu sendiri, seperti ini:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
Pembaruan untuk tampilan split: Dalam komentar, Dmitry bertanya:
Bagaimana saya bisa mendapatkan ukuran layar dalam tampilan split?
Kode yang diberikan di atas melaporkan ukuran layar, bahkan dalam mode layar terbagi. Saat Anda menggunakan mode layar terbagi, jendela aplikasi Anda berubah. Jika kode di atas tidak memberi Anda informasi yang Anda harapkan, maka seperti OP, Anda melihat objek yang salah. Namun, dalam hal ini, Anda harus melihat jendela alih-alih layar, seperti ini:
CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;
Cepat 4.2
let screenRect = UIScreen.main.bounds
let screenWidth = screenRect.size.width
let screenHeight = screenRect.size.height
// split screen
let windowRect = self.view.window?.frame
let windowWidth = windowRect?.size.width
let windowHeight = windowRect?.size.height
[UIScreen scale]
.CGRectGetWidth()
danCGRectGetHeight()
bukannya langsung mengaksessize
bidang dalam persegi panjang. Saya tidak berpikir itu akan pernah menjadi masalah sehubungan dengan persegi panjang layar, tapi saya kira itu sesuatu yang harus diperhatikan.Hati-hati, [UIScreen mainScreen] juga mengandung bilah status, jika Anda ingin mengambil bingkai untuk aplikasi Anda (tidak termasuk bilah status), Anda harus menggunakan
sumber
return [[UIScreen mainScreen] bounds].size.width;
Saya telah menerjemahkan beberapa jawaban Objective-C di atas ke dalam kode Swift. Setiap terjemahan diproses dengan referensi ke jawaban asli.
Jawaban utama
Fungsi Jawaban Sederhana
Jawaban Orientasi Perangkat
Jawab Log
sumber
return UIScreen.mainScreen().bounds].size.width
Saya telah menggunakan metode kenyamanan ini sebelumnya:
sumber
Saya menyadari bahwa ini adalah pos lama, tetapi kadang-kadang saya merasa berguna untuk mendefinisikan konstanta seperti ini sehingga saya tidak perlu khawatir tentang hal itu:
Konstanta di atas harus mengembalikan ukuran yang benar tidak peduli orientasi perangkat. Maka mendapatkan dimensi sesederhana:
sumber
Sangat, sangat mudah untuk mendapatkan ukuran perangkat Anda serta memperhitungkan orientasinya:
sumber
UIAlertView
akan memasukkan dirinya sebagai tampilan rootViewController keyWindow. Saya memiliki logika yang menghindari kasing sudut karena jika tampilan lansiran naik, pengguna tidak dapat berinteraksi dengan keyboard, jadi biasanya tidak perlu mengambil bingkai keyboard saat itu.Kami juga harus mempertimbangkan orientasi perangkat:
sumber
sumber
Di sini saya telah memperbarui untuk 3 cepat
applicationFrame sudah tidak digunakan lagi di iOS 9
Dalam tiga cepat mereka telah menghapus () dan mereka telah mengubah beberapa konvensi penamaan, Anda dapat merujuk di sini Tautan
sumber
Jawaban modern:
jika aplikasi Anda mendukung tampilan split di iPad, masalah ini menjadi sedikit rumit. Anda perlu ukuran jendela, bukan layar, yang mungkin berisi 2 aplikasi. Ukuran jendela juga dapat bervariasi saat berjalan.
Gunakan ukuran jendela utama aplikasi:
Catatan: Metode di atas mungkin mendapatkan nilai yang salah sebelum jendela menjadi jendela kunci saat memulai. jika Anda hanya membutuhkan lebar, metode di bawah ini sangat disarankan :
Solusi lama menggunakan
UIScreen.main.bounds
akan mengembalikan batas perangkat. Jika aplikasi Anda berjalan dalam mode tampilan terpisah, itu mendapatkan dimensi yang salah.self.view.window
dalam jawaban terpanas mungkin mendapatkan ukuran yang salah ketika aplikasi berisi 2 atau lebih jendela dan ukuran jendela kecil.sumber
Manfaatkan ini
Structs
untuk mengetahui info berguna tentang perangkat saat ini di Swift 3.0sumber
Jika Anda ingin lebar / tinggi layar terlepas dari orientasi perangkat (baik untuk ukuran potret, hanya pengontrol tampilan yang diluncurkan dari orientasi lanskap):
sumber
Berikut adalah cara cepat untuk mendapatkan ukuran layar:
Ini termasuk sebagai fungsi standar dalam:
https://github.com/goktugyil/EZSwiftExtensions
sumber
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
sumber
cepat 3.0
untuk lebar
untuk ketinggian
sumber
Anda dapat menempatkan makro ini di file pch Anda dan digunakan di mana saja dalam proyek dengan menggunakan "SCREEN_WIDTH"
dan "SCREEN_HEIGHT"
Contoh menggunakan:
sumber