私はiPhoneとiPod Touchで動くアプリを持っています、それはRetina iPadと全ての上で動くことができますが、調整が1つ必要です。現在のデバイスがiPadかどうかを検出する必要があります。ユーザーが自分のUIViewController
でiPadを使用しているかどうかを検出し、それに応じて何かを変更するために使用できるコードは何ですか?
デバイスがiPadかどうかを確認する方法はいくつかあります。これは、デバイスが実際にiPadかどうかを確認するための私のお気に入りの方法です。
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad )
{
return YES; /* Device is iPad */
}
#define IDIOM UI_USER_INTERFACE_IDIOM()
#define IPAD UIUserInterfaceIdiomPad
if ( IDIOM == IPAD ) {
/* do something specifically for iPad. */
} else {
/* do something specifically for iPhone or iPod touch. */
}
if ( [(NSString*)[UIDevice currentDevice].model hasPrefix:@"iPad"] ) {
return YES; /* Device is iPad */
}
#define IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
if ( IPAD )
return YES;
Swiftのソリューションについては、次の回答を参照してください。 https://stackoverflow.com/a/27517536/2057171
Swiftでは、Universalアプリケーションでデバイスの種類を決定するために次の等式を使用できます。
UIDevice.current.userInterfaceIdiom == .phone
// or
UIDevice.current.userInterfaceIdiom == .pad
使用法その場合は、次のようになります。
if UIDevice.current.userInterfaceIdiom == .pad {
// Available Idioms - .pad, .phone, .tv, .carPlay, .unspecified
// Implement your logic here
}
これは、iOS 3.2以降のUIDeviceの一部です。
[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad
これも使えます
#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
...
if (IPAD) {
// iPad
} else {
// iPhone / iPod Touch
}
アプリがiPadまたはUniversal用の場合は、UI_USER_INTERFACE_IDIOM()はiPadのみを返します。 iPhoneアプリがiPadで実行されているのであれば、そうではありません。そのため、代わりにモデルを確認してください。
注意してください:あなたのアプリがiPhoneデバイスのみをターゲットにしている場合、iphone互換モードで実行されているiPadは以下のステートメントではfalseを返します。
#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
物理的なiPadデバイスを検出する正しい方法は次のとおりです。
#define IS_IPAD_DEVICE ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"])
私はXcode内のシミュレータでは解決策がうまくいかないことがわかりました。代わりに、これは動作します:
NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;
if ([[deviceModel substringWithRange:NSMakeRange(0, 4)] isEqualToString:@"iPad"]) {
DebugLog(@"iPad");
} else {
DebugLog(@"iPhone or iPod Touch");
}
if UIDevice.current.model.hasPrefix("iPad") {
print("iPad")
} else {
print("iPhone or iPod Touch")
}
また、Xcodeの「その他の例」では、デバイスモデルは「iPad Simulator」として返されるため、上記のTweakはそれを解決するはずです。
Swiftでそれをする多くの方法:
以下のモデルを確認します(ここでは大文字と小文字を区別して検索することしかできません)。
class func isUserUsingAnIpad() -> Bool {
let deviceModel = UIDevice.currentDevice().model
let result: Bool = NSString(string: deviceModel).containsString("iPad")
return result
}
以下のモデルをチェックします(ここでは大文字と小文字を区別する/区別しないで検索できます)。
class func isUserUsingAnIpad() -> Bool {
let deviceModel = UIDevice.currentDevice().model
let deviceModelNumberOfCharacters: Int = count(deviceModel)
if deviceModel.rangeOfString("iPad",
options: NSStringCompareOptions.LiteralSearch,
range: Range<String.Index>(start: deviceModel.startIndex,
end: advance(deviceModel.startIndex, deviceModelNumberOfCharacters)),
locale: nil) != nil {
return true
} else {
return false
}
}
以下のUIDevice.currentDevice().userInterfaceIdiom
は、アプリがiPadまたはUniversal用の場合にのみiPadを返します。 iPhoneアプリがiPad上で実行されているのであれば、そうではありません。そのため、代わりにモデルを確認してください。 :
class func isUserUsingAnIpad() -> Bool {
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad {
return true
} else {
return false
}
}
以下のこのスニペットは、クラスがUIViewController
を継承していない場合はコンパイルされません。それ以外の場合は正常に動作します。 UI_USER_INTERFACE_IDIOM()
は、アプリがiPadまたはUniversal用の場合にのみiPadを返します。 iPhoneアプリがiPad上で実行されているのであれば、そうではありません。そのため、代わりにモデルを確認してください。 :
class func isUserUsingAnIpad() -> Bool {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
return true
} else {
return false
}
}
*
Swift 3.0では
*
if UIDevice.current.userInterfaceIdiom == .pad {
//pad
} else if UIDevice.current.userInterfaceIdiom == .phone {
//phone
} else if UIDevice.current.userInterfaceIdiom == .tv {
//tv
} else if UIDevice.current.userInterfaceIdiom == .carPlay {
//CarDisplay
} else {
//unspecified
}
多くの回答は良いですが、私はSwift 4ではこのように使っています
定数を作成
struct App {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
こんな感じ
if App.isRunningOnIpad {
return load(from: .main, identifier: identifier)
} else {
return load(from: .ipad, identifier: identifier)
}
編集:推奨どおり、UIDeviceに拡張機能を作成する
extension UIDevice {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
このようにiPadが存在することを確認するためにrangeOfStringをチェックすることができます。
NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;
if ([deviceModel rangeOfString:@"iPad"].location != NSNotFound) {
NSLog(@"I am an iPad");
} else {
NSLog(@"I am not an iPad");
}
さらにもう1つの迅速な方法:
//MARK: - Device Check
let iPad = UIUserInterfaceIdiom.Pad
let iPhone = UIUserInterfaceIdiom.Phone
@available(iOS 9.0, *) /* AppleTV check is iOS9+ */
let TV = UIUserInterfaceIdiom.TV
extension UIDevice {
static var type: UIUserInterfaceIdiom
{ return UIDevice.currentDevice().userInterfaceIdiom }
}
使用法:
if UIDevice.type == iPhone {
//it's an iPhone!
}
if UIDevice.type == iPad {
//it's an iPad!
}
if UIDevice.type == TV {
//it's an TV!
}
なぜそんなに複雑なのですか?これが私のやり方です...
Swift 4:
var iPad : Bool {
return UIDevice.current.model.contains("iPad")
}
こうすればif iPad {}
と言うことができます
In Swift 4.2 and Xcode 10
if UIDevice().userInterfaceIdiom == .phone {
//This is iPhone
} else if UIDevice().userInterfaceIdiom == .pad {
//This is iPad
} else if UIDevice().userInterfaceIdiom == .tv {
//This is Apple TV
}
特定の機器を検出したい場合
let screenHeight = UIScreen.main.bounds.size.height
if UIDevice().userInterfaceIdiom == .phone {
if (screenHeight >= 667) {
print("iPhone 6 and later")
} else if (screenHeight == 568) {
print("SE, 5C, 5S")
} else if(screenHeight<=480){
print("4S")
}
} else if UIDevice().userInterfaceIdiom == .pad {
//This is iPad
}
最新バージョンのiOSの場合は、単にUITraitCollection
を追加します。
extension UITraitCollection {
var isIpad: Bool {
return horizontalSizeClass == .regular && verticalSizeClass == .regular
}
}
そしてUIViewController
内で次のことをチェックしてください。
if traitCollection.isIpad { ... }
if(UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad)
{
print("This is iPad")
}else if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.phone)
{
print("This is iPhone");
}