随着Apple产品系列的更新,我更新了软件,并试图找出新设备屏幕的物理尺寸(以像素为单位)。
使用std::string
很清楚:
使用std::string_view
也很清楚:
但是iPhone XS
但是我的计算得出的数据类似于iPhone XS:
我认为用iPhone XR
和iPhone XS Max
划分为Device.Info.PixelScreenSize.Height
,然后重新检查Device.Info.PixelScreenSize.Width
,即Device.Info.ScalingFactor
,然后将其划分为{ {1}}。
真相在哪里?要获得可靠的数据该怎么办?
P.S。对不起,Google翻译
编辑: 1。 App.cs
Xamarin.Essentials
2。 AppDelegate.cs
DeviceDisplay.ScreenMetrics
3。 MainPageViewModel.cs
Device.Info.ScalingFactor
答案 0 :(得分:5)
编辑:
我认为您选择了错误的模拟器。 XS Max 确实根据您的期望提供了正确的值。
这是一个简单的快速代码(请检查nativeBounds
的实际大小):
print("Name:\t\(UIDevice.current.name)")
print("Size:\t\(UIScreen.main.bounds.size)")
print("Scale:\t\(UIScreen.main.scale)")
print("Native:\t\(UIScreen.main.nativeBounds.size)")
这是所有四个X模拟器的输出
Name: iPhone X
Size: (375.0, 812.0)
Scale: 3.0
Native: (1125.0, 2436.0)
Name: iPhone XR
Size: (414.0, 896.0)
Scale: 2.0
Native: (828.0, 1792.0)
Name: iPhone XS
Size: (375.0, 812.0)
Scale: 3.0
Native: (1125.0, 2436.0)
Name: iPhone XS Max
Size: (414.0, 896.0)
Scale: 3.0
Native: (1242.0, 2688.0)
原始答案:
DeviceDisplay.ScreenMetrics
中的 Xamarin.Essentials
是一个简单的bounds * scale
计算。 (参考:source code)
Scale
documentation明确指出:
默认逻辑坐标空间是使用点测量的。
您可以从resolutions参考中看到, XS max 和 XR 的 Points 测量值完全相同(尽管有像素测量的差异)。
这是苹果公司希望我们为简单起见而使用的代码,避免在代码中出现类似android的碎片(但是已经有3种大小.. hmmph)。
最后,对于任何与应用程序/代码相关的讨论,只需参考要点(即比例因子),而忽略物理尺寸和像素。
答案 1 :(得分:-1)
问题已解决。实际上,当您从Resources文件夹启动应用程序时,XCode 10.0模拟器会获取最合适的图像,并通过其尺寸来构建模拟器的屏幕尺寸,并且由于之前创建的项目,因此没有适用于新手机尺寸的图像,它占用的空间最大(对于Iphone X)。需要对此进行更正。