iOS 디바이스별 화면 다루기
08 Mar 2017
iOS에서 디바이스별로 다양한 화면을 지원함에 따라 view를 세부적으로 설정 해야할 필요성이 늘어나고 있습니다. iPhone 종류만 iPhone 7, iPhone 7 plus, iPhone SE가 있고, iPad도 프로 모델까지 합하면 설정시 못 해도 6개 이상을 해주어야 합니다. iOS에서는 여러 화면에 대응할 수 있도록 UIDevice
를 통해 화면별로 코드를 수정할 수 있도록 해줍니다.
// ScreenExtension.swift
import UIKit
extension UIDevice {
public var isiPhone: Bool {
if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad {
return true
}
return false
}
public var isiPad: Bool {
if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad {
return true
}
return false
}
}
프로젝트에 UIDevice
에 대한 extension
을 설정해두시면, 프로젝트 어디에서든 해당 화면에 대한 구분을 할 수 있습니다. 즉, view에다가 아래 코드를 입력하여 아이폰에만 적용되는 코드, 아이패드에만 적용되는 코드를 넣을 수 있습니다.
if UIDevice.current.isiPhone {
// iPhone
} else if UIDevice.current.isiPad {
// iPad
}
다만, 요즘엔 아이폰과 패드에 대한 구분 이상으로 더 세세하게 나눌 필요가 있습니다. 그래서, 기기별로 좀 더 세세하게 나눠보면,
// ScreenExtesion.swift
import UIKit
extension UIDevice {
public var isiPhoneSE: Bool {
if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.phone && (UIScreen.main.bounds.size.height == 568 || UIScreen.main.bounds.size.width == 320) {
return true
}
return false
}
public var isiPhonePlus: Bool {
if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.phone && (UIScreen.main.bounds.size.height == 736 || UIScreen.main.bounds.size.width == 414) {
return true
}
return false
}
public var isiPad: Bool {
if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad && (UIScreen.main.bounds.size.height == 1024 || UIScreen.main.bounds.size.width == 768) {
return true
}
return false
}
public var isiPadPro12: Bool {
if UIDevice.current.userInterfaceIdiom == UIUserInterfaceIdiom.pad && (UIScreen.main.bounds.size.height == 1366 || UIScreen.main.bounds.size.width == 1366) {
return true
}
return false
}
}
다음과 같이 나눌 수 있고, 이는 아래 코드들을 사용할 수 있게 해줍니다.
if UIDevice.current.isiPadPro12 {
// iPad Pro 12.9
} else if UIDevice.current.isiPad {
// iPad Air2, iPad Pro 9.7
} else if UIDevice.current.isiPhonePlus {
// iPhone 7+
} else if UIDevice.current.isiPhoneSE {
// iPhone SE
} else {
// iPhone 7
}