【Swift UI】画面(スクリーン)の横幅を取得する方法!デバイスサイズ
この記事からわかること
- Swift UIで画面(スクリーン)の横幅を取得するには?
- デバイスのサイズや解像度(ピクセル)の取得方法
- UIScreenクラスの意味
- frameに指定する方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
Swiftでアプリ開発をする際に何かと必要になるデバイスの横幅や高さなどのサイズや解像度などを取得する方法をまとめていきます。
UIScreen.mainはiOS16から非推奨
※追記:2023年11月11日
iOS16からUIScreen
クラスのmain
プロパティがdeprecated(非推奨)になってしまったようなので代替の方法を紹介しておきます。
UIApplication
クラスのconnectedScenes
からUIWindowScene
型を取得しscreen.bounds
プロパティからデバイスの横幅や高さを取得できます。
if let window = UIApplication.shared.connectedScenes.first as? UIWindowScene {
print(window.screen.bounds) // (0.0, 0.0, 430.0, 932.0) CGRect型
print(window.screen.bounds.width) // 430.0 CGFloat型
print(window.screen.bounds.height) // 932.0 CGFloat型
}
デバイス画面のサイズを取得する
Swiftでは画面のサイズをUIScreen
クラスのmain.bounds
プロパティから取得することができます。
ここでいうデバイス画面とは画面のサイズです。iPhoneのモデルによって異なり、例えばiPhoneSE(2nd)なら「375×667ピクセル」iPhone 13なら「390×844ピクセル」となっています。
横幅を取得する
let deviceWidth = UIScreen.main.bounds.width
print(deviceWidth) // 375.0
高さを取得する
let deviceHeight = UIScreen.main.bounds.height
print(deviceHeight) // 667.0
サイズを取得する
let deviceSize = UIScreen.main.bounds.size
print(deviceSize) // (375.0, 667.0)
print(deviceSize.width) // 375.0
print(deviceSize.height) // 667.0
デバイス画面の解像度(ピクセル)を取得する
解像度はUIScreen
クラスのmain.nativeBounds
プロパティから取得することができます。
解像度とは画素(ピクセル)の密度を表している数値で、どれだけ細かく表示できるかということです。iPhone SE(2nd)なら「750x1334ピクセル」iPhone 13なら「1080x2340ピクセル」となっています。
横幅の解像度を取得する
let deviceResolutionWidth = UIScreen.main.nativeBounds.width
print(deviceResolutionWidth) // 750.0
高さの解像度を取得する
let deviceResolutionHeight = UIScreen.main.nativeBounds.height
print(deviceResolutionHeight) // 1334.0
全体の解像度を取得する
let deviceResolutionSize = UIScreen.main.nativeBounds.size
print(deviceResolutionSize) // (750.0, 1334.0)
print(deviceResolutionSize.width) // 750.0
print(deviceResolutionSize.height) // 1334.0
デバイスのスケールを取得する
スケール(倍率)はUIScreen
クラスのmain.scale
プロパティから取得することができます。
let deviceScale = UIScreen.main.scale
print(deviceScale) // 2.0
UIScreenクラスとは
UIScreen
クラスはデバイスの画面に関する情報を保持しているクラスです。そのプロパティに画面のサイズが格納されるbounds
などが定義されています。
bounds
は「境界」という意味で正確には「画面の境界矩形(四角形)を点で測定した値」を取得できます。
var bounds: CGRect { get }
bounds
はCGRect
構造体に準じた値で付与されます。
CGRect
構造体は長方形の寸法をsize
やwidth
でプロパティに持つ構造体でデバイスサイズはここから取得できます。
frameに指定して位置を調整する
画面のサイズが取得できればデバイスが変わっても要素のサイズの割合を変更することなく指定することが可能です。
デバイスの大きさいっぱいに要素を広げる
Text("Hello").frame(width: deviceWidth, height: 30).background(.orange)
デバイスの大きさ半分に要素を広げる
Text("Hello").frame(width: deviceWidth/2, height: 30).background(.orange)
Apple Watchは別のクラスを使用
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
私がSwift UI学習に使用した参考書