Безопасная область может быть настроена путем извлечения значения Толщина с помощью метода Page.SafeAreaInsets
из пространства имен Xamarin.Forms.PlatformConfiguration.iOSSpecifi c. Затем его можно изменить, как требуется, и повторно назначить свойству Padding в конструкторе страницы или OnAppearing переопределить:
protected override void OnAppearing()
{
base.OnAppearing();
var safeInsets = On<iOS>().SafeAreaInsets();
safeInsets.Bottom = 0;
safeInsets.Top = 35;
safeInsets.Left = 35;
safeInsets.Right = 35;
Padding = safeInsets;
}
Эффект Portrait :
Эффект Пейзаж :
Если вам нужно настроить SafeAreaInsets
при изменении ориентации устройства. Для удобства можно использовать метод OnSizeAllocated .
protected override void OnSizeAllocated(double width, double height)
{
base.OnSizeAllocated(width, height);
if (width != this.width || height != this.height)
{
this.width = width;
this.height = height;
if (width > height)
{
Console.WriteLine("Landscape");
var safeInsets = On<iOS>().SafeAreaInsets();
safeInsets.Bottom = 0;
safeInsets.Top = 0;
safeInsets.Left = 35;
safeInsets.Right = 35;
Padding = safeInsets;
}
else
{
Console.WriteLine("Portrait");
var safeInsets = On<iOS>().SafeAreaInsets();
safeInsets.Bottom = 0;
safeInsets.Top = 35;
safeInsets.Left = 0;
safeInsets.Right = 0;
Padding = safeInsets;
}
}
}
========== ======================= Update ========================== ======
Если вам нужно разместить как можно больше и больше устройств, вы можете сделать некоторые суждения о модели телефона (например, iPhone X), чтобы установить размер зоны безопасности по бокам. Кроме того, вы также можете проверить, содержат ли панель навигации или панель вкладок, чтобы изменить размер Thickness
. Это должно быть
protected override void OnSizeAllocated(double width, double height)
{
base.OnSizeAllocated(width, height);
if (width != this.width || height != this.height)
{
this.width = width;
this.height = height;
if (width > height)
{
Console.WriteLine("Landscape");
var safeInsets = On<iOS>().SafeAreaInsets();
// whether is iPhone X
if (deveiceType.Equals("iPhone X"))
{
//whether contain Navigation Bar
if (ContainNavigationBar) { safeInsets.Top = 44; } else { safeInsets.Top = 0; }
//whether conatin Tab Bar
if (ContainTabBar) { safeInsets.Bottom = 34; } else { safeInsets.Bottom = 0; }
}
safeInsets.Left = 35;
safeInsets.Right = 35;
Padding = safeInsets;
Padding = safeInsets;
}
else
{
Console.WriteLine("Portrait");
var safeInsets = On<iOS>().SafeAreaInsets();
// whether is iPhone X
if (deveiceType.Equals("iPhone X"))
{
//whether contain Navigation Bar
if (ContainNavigationBar) { safeInsets.Top = 84; } else { safeInsets.Top = 44; }
//whether conatin Tab Bar
if (ContainTabBar) { safeInsets.Bottom = 34; }else{ safeInsets.Bottom = 0; }
}
safeInsets.Left = 0;
safeInsets.Right = 0;
Padding = safeInsets;
}
}
}
Пока Apple не изменит высоту строки состояния в будущем, я не думаю, что будут проблемы с высотами, установленными жестким кодированием.