【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型
}

デバイス画面のサイズを取得する

公式リファレンス:UIScreenクラス

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 }

boundsCGRect構造体に準じた値で付与されます。

CGRect構造体は長方形の寸法をsizewidthでプロパティに持つ構造体でデバイスサイズはここから取得できます。

frameに指定して位置を調整する

画面のサイズが取得できればデバイスが変わっても要素のサイズの割合を変更することなく指定することが可能です。

デバイスの大きさいっぱいに要素を広げる

Text("Hello").frame(width: deviceWidth, height: 30).background(.orange)

デバイスの大きさ半分に要素を広げる

Text("Hello").frame(width: deviceWidth/2, height: 30).background(.orange)

Apple Watchは別のクラスを使用

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

私がSwift UI学習に使用した参考書

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index