にトップ/ボトムマージンを大きくなる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;
}
}
偉大な仕事は、あなた@SushiHangoverありがとう! – Nik
@ user2118781ありがとう、私はUITableView内のそのプロパティにバインドしているので、私が構築しているプロトタイプにあるキャッシュされたプロパティバージョンを追加しました(ランドスケープモードのときにノッチから要素をバンプするスクロールデモのような) – SushiHangover
これは「うまくいく」とはいえ、ほとんどの場合これをしないことをお勧めします。微妙な(またはあまり微妙ではない)バグを導入し、将来のハードウェアに互換性の問題を導入するための素晴らしい方法です。モデル識別子に依存したり、特定の画面サイズをハードコーディングしたりすることは、一般的なケースで問題を求めています。 – russbishop