iPhone模拟器(检测不同的设备模拟器)

iPhone simulator (detect different device simulators)

随着即将发布的 iPhone X,我希望能够为 iPhone X 显示不同的 UI 布局(由于圆角和底线,这有点像主页按钮的替代品)。

我正在使用以下 nuget 包来检索模型信息: https://github.com/dannycabrera/Get-iOS-Model

它工作得很好,但是所有不同的模拟器(iPhone 7、8、X)都只能作为模拟器出现。

有没有办法在我的 Xamarin 移动应用程序的代码中区分不同的 iPhone 模拟器?

非常感谢, 尼克

您应该简单地使用 Safe Area Layout Guide,它会自动增加 iPhone X 上的 top/bottom 边距。

由于模拟器是一个奇怪的动物,在 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;
    }
}

正如其他人所指出的,您绝对应该使用 Safe Area Layout Guide

如果您确实需要检测模型,请查找 SIMULATOR_MODEL_IDENTIFIER 环境变量。 iPhone X 将 return iPhone10,3

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