ใช้ UIDevice.current.userInterfaceIdiom เพื่อทราบว่ารันบนอุปกรณ์ประเภทไหน
Enum ค่าที่เป็นไปได้
enum UIUserInterfaceIdiom: Int {
case unspecified // ไม่ระบุ
case phone // iPhone และ iPod touch
case pad // iPad
case tv // Apple TV (iOS 9+)
case carPlay // CarPlay (iOS 9+)
case mac // Mac Catalyst (iOS 13+)
@available(iOS 14.0, *)
case vision // Apple Vision Pro
}
การใช้งานพื้นฐาน
let idiom = UIDevice.current.userInterfaceIdiom
switch idiom {
case .phone:
print("📱 iPhone / iPod touch")
case .pad:
print("📱 iPad")
case .tv:
print("📺 Apple TV")
case .carPlay:
print("🚗 CarPlay")
case .mac:
print("💻 Mac (Catalyst)")
case .vision:
print("🥽 Vision Pro")
default:
print("❓ Unknown")
}
การใช้งานเฉพาะเจาะจง
// เช็ค iPad
if UIDevice.current.userInterfaceIdiom == .pad {
// iPad-specific layout
setupSplitViewController()
} else {
// iPhone layout
setupNavigationStack()
}
// Responsive Design
let isPad = UIDevice.current.userInterfaceIdiom == .pad
let columns = isPad ? 4 : 2
let fontSize: CGFloat = isPad ? 20 : 16
ร่วมกับ Size Classes (แนะนำมากกว่า)
แทนที่จะเช็ค Idiom ควรใช้ Trait Collections / Size Classes ซึ่งยืดหยุ่นกว่า:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.horizontalSizeClass == .regular {
// iPad, iPhone Plus/Max landscape, Mac
setupRegularLayout()
} else {
// iPhone portrait
setupCompactLayout()
}
}
สรุป
userInterfaceIdiom- ใช้สำหรับ Logic แบบคร่าวๆ (Phone vs Pad vs TV)- Size Classes - ใช้สำหรับ Layout Responsive (แนะนำ)
UIDevice.current.model- ชื่อโมเดล (เช่น "iPhone", "iPad") ไม่ใช่รุ่นเฉพาะUIDevice.current.name- ชื่อที่ผู้ใช้ตั้ง (เช่น "John's iPhone")