UITraitCollectionによる端末、SizeClass取得
縦向き-横幅 | 縦向き-縦幅 | 横向き-横幅 | 横向き-縦幅 | |
---|---|---|---|---|
下以外 | Compact | Regular | Compact | Compact |
iPhone6sPlus | Compact | Regular | Regular | Compact |
iPad | Regular | Regular | Regular | Regular |
iPad SlideOver | Compact | Regular | Compact | Regular |
iPad SplitViewの右(右で割る) | Compact | Regular | Compact | Regular |
iPad SplitViewの左(右で割る) | Compact | Regular | Regular | Regular |
iPad SplitViewの右(中央で割る) | - | - | Compact | Regular |
iPad SplitViewの左(中央で割る) | - | - | Compact | Regular |
Swift2.2
//画面回転時によばれる
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
getViewAppearance(size)
}
//画面サイズ変更時に呼ばれる
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
getViewAppearance(self.view.frame.size)
}
func getViewAppearance(size: CGSize){
//比較の基準を設定
let horizontalSizeClass = UITraitCollection(horizontalSizeClass: .Regular)
let device = UITraitCollection(device: .Pad)
//iPadかどうか
if traitCollection.containsTraitsInCollection(device){
if traitCollection.containsTraitsInCollection(horizontalSizeClass) {
//Regular
print("iPad - 水平方向はRegular")
}else{
//Compact
print("iPad - 水平方向はCompact")
}
}else{
if size.width > size.height {
//横向きの判定.
print("iPhoneかiPod touch 横の長さのほうが長い")
}else{
//縦向きの判定
print("iPhoneかiPod touch 縦の長さのほうが長い")
}
}
}
Swift3
//画面回転時によばれる
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
getViewAppearance(size)
}
//画面サイズ変更時に呼ばれる
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
getViewAppearance(self.view.frame.size)
}
func getViewAppearance(_ size: CGSize){
//比較の基準を設定
let horizontalSizeClass = UITraitCollection(horizontalSizeClass: .regular)
let device = UITraitCollection(userInterfaceIdiom: .pad)
//iPadかどうか
if traitCollection.containsTraits(in: device){
if traitCollection.containsTraits(in: horizontalSizeClass){
//Regular
print("iPad - 水平方向はRegular")
}else{
//Compact
print("iPad - 水平方向はCompact")
}
}else{
if size.width > size.height {
//横向きの判定.
print("iPhoneかiPod touch 横の長さのほうが長い")
}else{
//縦向きの判定
print("iPhoneかiPod touch 縦の長さのほうが長い")
}
}
}
iPadで垂直方向がCompactになるときはないので、水平方向だけ見ればいいと思います。
iPhoneにSlideOverなどの機能はいまのところないので、画面が縦か横かだけを見ればいいと思います。
縦画面の時は横が狭くなるから上下にメニューを置き、横場面の時は縦が狭くなるから上か下にメニューをまとめる、といった使い方ができると思います。
↓これで十分じゃないかな(Swift3)
func getViewAppearance(_ size: CGSize){
//比較の基準を設定
let horizontalSizeClass = UITraitCollection(horizontalSizeClass: .regular)
if traitCollection.containsTraits(in: horizontalSizeClass){
//Regular
print("水平方向はRegular")
}else{
if size.width > size.height {
//横向きの判定.
print("水平方向はCompact 横の長さのほうが長い")
}else{
//縦向きの判定
print("水平方向はCompact 縦の長さのほうが長い")
}
}
}