Перемещение настраиваемой страницы под строку состояния на iOS

Чтобы расположить страницы моего приложения под строкой состояния iOS, я создал собственный рендер для своих страниц. Предполагается, что страница будет перемещена ниже панели, как это делает следующий XAML:

<local:CustomRenderedPage.Padding>
    <OnPlatform x:TypeArguments="Thickness">
        <OnPlatform.iOS>
            0, 40, 0, 0
        </OnPlatform.iOS>
    </OnPlatform>
</local:CustomRenderedPage.Padding>

Поэтому я использовал этот ответ, который я преобразовал в C#.

Тем не менее, без каких-либо ошибок, страница по-прежнему отображается за строкой состояния. Чтобы проверить, работает ли пользовательский рендерер, я также меняю цвет фона, который работает.

//manually adjust the frame of the main view to prevent it from appearing under the status bar.
var app = UIApplication.SharedApplication;

if (!app.StatusBarHidden)
{
    this.View.BackgroundColor = UIKit.UIColor.FromRGB(20, 100, 20); //works
    this.View.Frame = new CoreGraphics.CGRect(0.0, app.StatusBarFrame.Size.Height, this.View.Bounds.Size.Width, this.View.Bounds.Size.Height - app.StatusBarFrame.Size.Height); //  does not work
}

Log.WriteLine("Done");  // works

Я делаю что-то не так или почему это не работает?

2 ответа

Как я уже спрашивал ранее, это ГДЕ вы вызываете этот код и отвечаете "из моего пользовательского средства визуализации страниц". Но главное - ГДЕ в рендерере вы это называете. Вот код, который работает.

  [assembly: ExportRenderer(typeof(MainPage), typeof(MainPageRenderer))]
    namespace ButtonRendererDemo.iOS
    {
        class MainPageRenderer : PageRenderer
        {

            public override void ViewWillAppear(bool animated)
            {
                View.Frame = new CoreGraphics.CGRect(View.Frame.X, View.Frame.Y + 100, View.Frame.Width, View.Frame.Height);
            }
        }
    }

Вы можете сделать это в XAML

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
            xmlns:cv="clr-namespace:Xamarin.Forms;assembly=Xamarin.Forms.CarouselView"
            xmlns:local="clr-namespace:ButtonRendererDemo;assembly=ButtonRendererDemo"
            x:Class="ButtonRendererDemo.PageWithCarousel"
             Padding="0,100,0,0">

введите описание изображения здесь

Другие вопросы по тегам