私は iPhone と iPod Touch で動作するアプリを持っています。それは Retina iPad でも動作しますが、1 つの調整が必要です。現在のデバイスが iPad かどうかを検出する必要があります。ユーザーが iPad を使用しているかどうかを検出し、UIViewController
それに応じて何かを変更するには、どのコードを使用できますか?
17 に答える
デバイスが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では、次の等式を使用してユニバーサル アプリのデバイスの種類を判別できます。
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
}
注意: アプリが iPhone デバイスのみをターゲットにしている場合、iPhone 互換モードで実行されている iPad は、以下のステートメントに対して false を返します。
#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
物理的な iPad デバイスを検出する正しい方法は次のとおりです。
#define IS_IPAD_DEVICE ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"])
Xcode 内のシミュレーターでは、いくつかの解決策がうまくいかないことがわかりました。代わりに、これは機能します:
オブジェクトC
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 シミュレーター」として返されるため、上記の調整でそれが解決されるはずです。
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 を返します。iPad で実行されている iPhone アプリの場合は、そうではありません。したがって、代わりにモデルを確認する必要があります。:
class func isUserUsingAnIpad() -> Bool {
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad {
return true
} else {
return false
}
}
以下のこのスニペットは、クラスが を継承しない場合はコンパイルされませんUIViewController
。それ以外の場合は問題なく動作します。UI_USER_INTERFACE_IDIOM()
アプリが iPad または Universal 用の場合、iPad のみを返します。iPad で実行されている iPhone アプリの場合は、そうではありません。したがって、代わりにモデルを確認する必要があります。:
class func isUserUsingAnIpad() -> Bool {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
return true
} else {
return false
}
}
*
スイフト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.2および 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 { ... }