2017-09-28 10 views
1

iPhone Xの今後のリリースでは、iPhone X用に異なるUIレイアウトを表示できるようにしたいと思います。ボタンの交換)。iPhoneシミュレータ(別のデバイスシミュレータを検出する)

私は、モデル情報を取得するには、次のnugetパッケージを使用しています: https://github.com/dannycabrera/Get-iOS-Model

それは完全に正常に動作しますが、すべて異なるシミュレータ(iPhone 7、8、Xは)のみシミュレータとして出てきます。

私のXamarinモバイルアプリケーション内のさまざまなiPhoneシミュレータのコードを区別する方法はありますか?

多くのおかげで、 ニック

答えて

1

にトップ/ボトムマージンを大きくなるSafe Area Layout Guideを使用する必要がありますIOSバージョンと物理デバイス上FaceIDの可用性のための他の試験後に、他の試験と良い:

public bool iPhoneX() 
{ 
    var version = new Version(ObjCRuntime.Constants.Version); 
    if (version < new Version(11, 0)) 
     return false; 
    if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.DEVICE) 
    { 
     using (var context = new LocalAuthentication.LAContext()) 
     { 
      if (context.BiometryType == LABiometryType.TypeFaceId) 
       return true; 
     } 
     return false; 
    } 
    if (UIScreen.MainScreen.PreferredMode.Size.Height == 2436) 
     return true; 
    return false; 
} 

または反復(結合)のために最適化されたプロパティを呼び出し:

static bool? iPhoneX; 
public bool isPhoneX 
{ 
    get 
    { 
     if (iPhoneX == null) 
     { 
      if (new Version(ObjCRuntime.Constants.Version) < new Version(11, 0)) 
       iPhoneX = false; 
      else 
      { 
       if (ObjCRuntime.Runtime.Arch == ObjCRuntime.Arch.DEVICE) 
       { 
        using (var context = new LocalAuthentication.LAContext()) 
        { 
         iPhoneX = context.BiometryType == LABiometryType.TypeFaceId; 
        } 
       } 
       else 
        iPhoneX = UIScreen.MainScreen.PreferredMode.Size.Height == 2436; 
      } 
     } 
     return (bool)iPhoneX; 
    } 
} 
+0

偉大な仕事は、あなた@SushiHangoverありがとう! – Nik

+0

@ user2118781ありがとう、私はUITableView内のそのプロパティにバインドしているので、私が構築しているプロトタイプにあるキャッシュされたプロパティバージョンを追加しました(ランドスケープモードのときにノッチから要素をバンプするスクロールデモのような) – SushiHangover

+0

これは「うまくいく」とはいえ、ほとんどの場合これをしないことをお勧めします。微妙な(またはあまり微妙ではない)バグを導入し、将来のハードウェアに互換性の問題を導入するための素晴らしい方法です。モデル識別子に依存したり、特定の画面サイズをハードコーディングしたりすることは、一般的なケースで問題を求めています。 – russbishop

0

あなたは、単に自動的にシミュレータが奇妙な動物であるので、画面サイズがようであるiPhone X.

+0

ありがとうございますekscrypto、これに関係なく; iPhone 8とiPhone Xのシミュレータを区別する方法はありますか?画面サイズ/解像度で行く以外は?ありがとう – Nik

0

他の人が指摘したように、間違いなくSafe Area Layout Guideを使用する必要があります。

実際にモデルを検出する必要がある場合は、SIMULATOR_MODEL_IDENTIFIER環境変数を探します。 iPhone XはiPhone10,3を返します。

let model = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]

関連する問題