2016-10-15 6 views
1

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

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

Поэтому я использовал this ответ, который я преобразуется в 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 

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

ответ

-1

Вы можете сделать это в 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"> 

enter image description here

+0

Это то, что предполагается. – cocoseis

+0

Что такое «это» в вашем случае? И где вы называете этот код? –

+0

Я хочу переместить страницу вниз. Я вызываю это из встроенного средства визуализации страницы. – cocoseis

0

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

[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); 
      } 
     } 
    } 
+0

Это работает для вас? Это не для меня ... Я вызывал свой код из метода OnElementChanged. Однако изменение фона-фона выполняется из 'ViewWillAppear', а также' OnElementChanged'. – cocoseis

+0

Да, это работает для меня. Результат совпадает с изображением, которое я опубликовал в другом ответе. Вы не можете вызвать код в OnElementChage, потому что View.Frame еще не заполнен. –

+0

Любая идея, почему она не работает для меня, даже если изменение цвета фона действительно работает? – cocoseis

Смежные вопросы