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"]
随着即将发布的 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"]