在Swift中使用UI_USER_INTERFACE_IDIOM()检测当前设备

UI_USER_INTERFACE_IDIOM()在iPhone和iPad之间检测到的Swift 相当于什么?

Use of unresolved identifier在Swift中编译时出现错误。


慕慕森
浏览 1127回答 3
3回答

月关宝盒

使用Swift时,您可以使用enum UIUserInterfaceIdiom,定义为:enum UIUserInterfaceIdiom : Int {    case unspecified    case phone // iPhone and iPod touch style UI    case pad // iPad style UI}因此,您可以将其用作:UIDevice.current.userInterfaceIdiom == .padUIDevice.current.userInterfaceIdiom == .phoneUIDevice.current.userInterfaceIdiom == .unspecified或使用Switch语句:    switch UIDevice.current.userInterfaceIdiom {    case .phone:        // It's an iPhone    case .pad:        // It's an iPad    case .unspecified:        // 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]直接使用。

慕姐8265434

Swift 2.0和iOS 9和Xcode 7.1// 1. request an UITraitCollection instancelet deviceIdiom = UIScreen.mainScreen().traitCollection.userInterfaceIdiom// 2. check the idiomswitch (deviceIdiom) {case .Pad:    print("iPad style UI")case .Phone:    print("iPhone and iPod touch style UI")case .TV:     print("tvOS style UI")default:    print("Unspecified UI idiom")}Swift 3.0和Swift 4.0// 1. request an UITraitCollection instancelet deviceIdiom = UIScreen.main.traitCollection.userInterfaceIdiom// 2. check the idiomswitch (deviceIdiom) {case .pad:    print("iPad style UI")case .phone:    print("iPhone and iPod touch style UI")case .tv:     print("tvOS style UI")default:    print("Unspecified UI idiom")}使用UITraitCollection。通过UITraitEnvironment协议的traitCollection属性公开了iOS trait环境。以下类别采用了此协议:UIScreenUIWindowUIViewControllerUIPresentationControllerUIView
打开App,查看更多内容
随时随地看视频慕课网APP