iPadとiPhone出だし分けるときはUITraitCollectionで確認すべし!
はじめに
iPhoneとiPadで処理の分岐をしたいときどのように記述しているでしょうか?
普通に検索すると以下のコードのようにUIDevice.current.userInterfaceIdiomで判定する方法が出てきますが、スマートではありません。
if UIDevice.current.userInterfaceIdiom == .phone {
// iPhoneでしたい処理
} else if UIDevice.current.userInterfaceIdiom == .pad {
// iPadでしたい処理
}
TraitCollectionを使った出し分け
iPhoneとiPadは縦横の長さで判別した方が良いです。
let horizonSizeClass = UITraitCollection(horizontalSizeClass: .regular)
let verticalSizeClass = UITraitCollection(verticalSizeClass: .regular)
if traitCollection.containsTraits(in: horizonSizeClass)
&& traitCollection.containsTraits(in: verticalSizeClass) {
//iPadでしたい処理
} else {
//iPhoneでしたい処理
}
以下の画像はAppleの公式ドキュメントから引っ張ってきた画像です。現在発売されている全てのiPadは[Regular, Regular]になっています。