281

私は iPhone と iPod Touch で動作するアプリを持っています。それは Retina iPad でも動作しますが、1 つの調整が必要です。現在のデバイスが iPad かどうかを検出する必要があります。ユーザーが iPad を使用しているかどうかを検出し、UIViewControllerそれに応じて何かを変更するには、どのコードを使用できますか?

4

17 に答える 17

604

デバイスが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

于 2012-04-15T23:57:04.767 に答える
184

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
}
于 2014-12-17T02:41:56.950 に答える
35

これは、iOS 3.2 の UIDevice の一部です。

[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad
于 2012-11-22T13:16:34.557 に答える
25

これも使えます

#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
...
if (IPAD) {
   // iPad
} else {
   // iPhone / iPod Touch
}
于 2013-01-28T13:39:42.773 に答える
16

注意: アプリが iPhone デバイスのみをターゲットにしている場合、iPhone 互換モードで実行されている iPad は、以下のステートメントに対して false を返します。

#define IPAD     UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad

物理的な iPad デバイスを検出する正しい方法は次のとおりです。

#define IS_IPAD_DEVICE      ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"])
于 2015-06-12T07:41:40.700 に答える
16

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 シミュレーター」として返されるため、上記の調整でそれが解決されるはずです。

于 2012-11-14T11:02:12.187 に答える
8

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
    }
}
于 2015-06-02T18:03:13.847 に答える
8

*

スイフト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
    }
于 2016-10-09T03:22:08.040 に答える
4

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
}
于 2018-10-12T11:09:01.460 に答える
0

iOS の最新バージョンの場合は、以下を追加するだけですUITraitCollection

extension UITraitCollection {

    var isIpad: Bool {
        return horizontalSizeClass == .regular && verticalSizeClass == .regular
    }
}

そして、UIViewControllerチェックするだけで:

if traitCollection.isIpad { ... }
于 2017-02-06T13:36:23.107 に答える