Best practice for SafeArea on iOS (Xamarin, MAUI)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Linq; | |
using Foundation; | |
using Xamarin.Essentials; | |
using Xamarin.Forms; | |
namespace MyNamespace | |
{ | |
public class DisplayHelper | |
{ | |
const string IphoneModelPrefix = "iphone"; | |
const string SimulatorKey = "SIMULATOR_MODEL_IDENTIFIER"; | |
const double NotchSafeArea = 34d; | |
const double DefaultSafeArea = 20d; | |
const double HomeIndicatorSafeArea = 24d; | |
static Thickness? safeArea; | |
public static Thickness GetSafeArea() | |
{ | |
safeArea ??= CalculateSafeArea(); | |
return safeArea.Value; | |
} | |
static Thickness CalculateSafeArea() | |
=> GetVersionsWithNotch().Contains(GetIPhoneModel()) | |
? new Thickness(0, NotchSafeArea, 0, HomeIndicatorSafeArea) | |
: new Thickness(0, DefaultSafeArea, 0, 0); | |
static string GetIPhoneModel() | |
{ | |
var model = DeviceInfo.DeviceType == DeviceType.Virtual | |
? NSProcessInfo.ProcessInfo.Environment[SimulatorKey].ToString() | |
: DeviceInfo.Model; | |
return model.ToLowerInvariant().Replace(IphoneModelPrefix, string.Empty); | |
} | |
static string[] GetVersionsWithNotch() | |
=> new[] | |
{ | |
"10,3", "10,6", "11,2", "11,4", "11,6", "11,8", "12,1", "12,3", "12,5", "13,1", "13,2", "13,3", "13,4", | |
"14,2", "14,3", "14,4", "14,5" | |
}; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment