Xamarin Forms: ios: Page.UseSafeArea не работает для всех дочерних элементов в CarouselPage - PullRequest
0 голосов
/ 14 июля 2020

У меня на CarouselPage 4 ребенка. Для каждой страницы, которую я добавил ios:Page.UseSafeArea, но свойство SafeArea работает только для первых 2 страниц, а для остальных 2 страниц функция безопасной области не работает. Моя версия XF - 4.7.0.1080 (последняя версия).

Я обнаружил ту же проблему на Github , есть ли решение для этой проблемы?

1 Ответ

1 голос
/ 15 июля 2020

Создайте собственное средство визуализации, чтобы написать свой собственный safeAreaInsets, а затем назначьте его Page.Padding. Здесь используйте задержку 200 мс, чтобы дождаться инициализации UIApplication.SharedApplication.KeyWindow.

[assembly: ExportRenderer(typeof(CustomPage), typeof(CustomPageRenderer))]
namespace App19F_8.iOS
{
    public class CustomPageRenderer : PageRenderer
    {
        public CustomPageRenderer()
        {
        }

        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);


            if (e.NewElement != null)
            {
                var inset = new Thickness();

                Device.StartTimer(new TimeSpan(200), () =>
                {
                    Device.BeginInvokeOnMainThread(() =>
                    {
                        if (UIApplication.SharedApplication.KeyWindow != null)
                        {
                            if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
                            {
                                var safeAreaInsets = UIApplication.SharedApplication.KeyWindow.SafeAreaInsets;
                                inset.Top = safeAreaInsets.Top;
                                inset.Bottom = safeAreaInsets.Bottom;
                                inset.Left = safeAreaInsets.Left;
                                inset.Right = safeAreaInsets.Right;
                            }
                        }

                        ContentPage page = e.NewElement as ContentPage;
                        page.Padding = inset;
                    });
                    return false;
                });
            }
        }
    }
}

. В вашем проекте Xamarin.forms сделайте страницу в вашем CarouselPage наследуемой от CustomPage.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...