什么是等价的UI_USER_INTERFACE_IDIOM()在Swift检测之间的iPhone和iPad?
我得到一个使用未解决的标识符错误时,在Swift编译。
什么是等价的UI_USER_INTERFACE_IDIOM()在Swift检测之间的iPhone和iPad?
我得到一个使用未解决的标识符错误时,在Swift编译。
当前回答
Swift 2.0 & iOS 7+ / iOS 8+ / iOS 9+
public class Helper {
public class var isIpad:Bool {
if #available(iOS 8.0, *) {
return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Pad
} else {
return UIDevice.currentDevice().userInterfaceIdiom == .Pad
}
}
public class var isIphone:Bool {
if #available(iOS 8.0, *) {
return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Phone
} else {
return UIDevice.currentDevice().userInterfaceIdiom == .Phone
}
}
}
使用:
if Helper.isIpad {
}
OR
guard Helper.isIpad else {
return
}
由于@user3378170
其他回答
Swift 2.0 & iOS 7+ / iOS 8+ / iOS 9+
public class Helper {
public class var isIpad:Bool {
if #available(iOS 8.0, *) {
return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Pad
} else {
return UIDevice.currentDevice().userInterfaceIdiom == .Pad
}
}
public class var isIphone:Bool {
if #available(iOS 8.0, *) {
return UIScreen.mainScreen().traitCollection.userInterfaceIdiom == .Phone
} else {
return UIDevice.currentDevice().userInterfaceIdiom == .Phone
}
}
}
使用:
if Helper.isIpad {
}
OR
guard Helper.isIpad else {
return
}
由于@user3378170
如果你想检查当前设备是iPad还是iPhone,那么你可以使用这些代码行:
if(UIDevice.currentDevice().userInterfaceIdiom == .Pad){
}else if(UIDevice.currentDevice().userInterfaceIdiom == .Phone){
}
斯威夫特3.0:
let userInterface = UIDevice.current.userInterfaceIdiom
if(userInterface == .pad){
//iPads
}else if(userInterface == .phone){
//iPhone
}else if(userInterface == .carPlay){
//CarPlay
}else if(userInterface == .tv){
//AppleTV
}
当使用Swift时,你可以使用enum UIUserInterfaceIdiom,定义为:
enum UIUserInterfaceIdiom : Int {
case unspecified
case phone // iPhone and iPod touch style UI
case pad // iPad style UI (also includes macOS Catalyst)
}
所以你可以这样使用它:
UIDevice.current.userInterfaceIdiom == .pad
UIDevice.current.userInterfaceIdiom == .phone
UIDevice.current.userInterfaceIdiom == .unspecified
或者使用Switch语句:
switch UIDevice.current.userInterfaceIdiom {
case .phone:
// It's an iPhone
case .pad:
// It's an iPad (or macOS Catalyst)
@unknown default:
// Uh, oh! What could it be?
}
UI_USER_INTERFACE_IDIOM()是一个Objective-C宏,它被定义为:
#define UI_USER_INTERFACE_IDIOM() \ ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? \ [[UIDevice currentDevice] userInterfaceIdiom] : \ UIUserInterfaceIdiomPhone)
还要注意,即使在使用Objective-C时,UI_USER_INTERFACE_IDIOM()宏也只在针对iOS 3.2及以下时才需要。当部署到iOS 3.2及以上版本时,可以直接使用[UIDevice userInterfaceIdiom]。
如果寇/换:
if UIDevice.current.userInterfaceIdiom == .pad {
// iPad
} else {
// not iPad (iPhone, mac, tv, carPlay, unspecified)
}