Videos
EDIT :
I think you have wrong simulator selected. The XS Max does give correct values as per your expectation.
Heres a simple swift code (check nativeBounds for actual size) :
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)")
And heres the output from all four X simulators
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)
Original answer :
DeviceDisplay.ScreenMetrics in Xamarin.Essentials, is a simple bounds * scale calculation. (Ref : source code)
Scale documentation clearly states :
The default logical coordinate space is measured using points.
You can see from resolutions reference, that Points measurement for XS max and XR is exactly the same (although theres difference in pixel measurement).
This is what apple intends us to use for simplicity and avoid android like fragmentation in code (but theres 3 sizes already .. hmmph).
In conclusion, for any app / code related discussion, just refer to the points (i.e. scale factor) and forget physical dimensions and pixels.
The question is settled. In fact, the XCode 10.0 simulator when you start the application from the Resources folder takes the most appropriate image and by its size builds the screen size of the simulator, and since the projects created earlier, there are no images for the new phone sizes, it takes the largest (that is, for the Iphone X). It is required to correct this.