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

时间:2017-09-28 04:31:39

标签: ios xamarin xamarin.ios ios-simulator

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

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

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

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

非常感谢, NIK

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您应该只使用Safe Area Layout Guide,它会自动增加iPhone X的上/下边距。

答案 2 :(得分:0)

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

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

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