物理尺寸Iphone XS Max和Iphone XR屏幕

时间:2018-09-20 11:32:07

标签: ios iphone xamarin.forms

随着Apple产品系列的更新,我更新了软件,并试图找出新设备屏幕的物理尺寸(以像素为单位)。

使用std::string很清楚:

  • 宽度/高度为1125/2436像素,
  • ScalingFactor 3,
  • 从物理上讲,它的宽度/高度为375/812点(例如Iphone X)。

使用std::string_view也很清楚:

  • 宽度/高度750/1624像素,
  • ScalingFactor 2,
  • 物理上也可以产生375/812点的高度/宽度。

但是iPhone XS

尚不清楚
  • Apple指示宽度/高度为1242/2688像素,

但是我的计算得出的数据类似于iPhone XS:

  • 宽度/高度1125/2436像素,
  • ScalingFactor 3,
  • 物理上获得375/812宽度/高度点。

我认为用iPhone XRiPhone 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

enter image description here

2 个答案:

答案 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)。需要对此进行更正。