2015-01-18 3 views
4

Я использую Xamarin.Forms и пытаюсь изменить цвет фона панели навигации на iOS.Xamarin forms change background color of navigation bar

У меня есть настраиваемый класс навигационной панели, который наследует от NavigationPage со свойством bindable и конструктором, который устанавливает цвет панели навигации. По моему мнению, на навигационной панели есть фон по умолчанию (черный) поверх фона Xamarin.Forms. Я могу установить цвет фона с помощью метода SetColor() (см. Ниже). Однако он оставляет черную линию, которая является фоном навигационной панели (iOS), как показано на рис. Picture Link

Теперь я пытаюсь установить цвет фона панели навигации iOS на белый или прозрачный. Я провел много времени, но ничего не получилось. Может кто-нибудь помочь, как установить фон на белый.

//PCL class 
public class CustomNavigationalPage : NavigationPage 
{ 
    public static readonly BindableProperty BarBgColorProperty = 
     BindableProperty. 
     Create<CustomNavigationalPage, UIColor> 
      (p => p.BarBackgroundColorR, null); 

    public UIColor BarBackgroundColorR 
    { 
     get { return (UIColor)base.GetValue (BarBgColorProperty); } 
     set { base.SetValue (BarBgColorProperty, value); } 
    } 

    public NavigationalPageCustomized() : base() 
    { 
     SetColor(); 
    } 

    void SetColor() 
    { 
     BarBackgroundColor = Color.Transparent; 
     BarTextColor = Color.Blue; 
    } 
} 

Навигационная панель визуализации класс:

[assembly: ExportRenderer (typeof (CustomNavigationalPage), typeof (CustomNavigationPageRenderer))] 

namespace project.iOS 
{ 
    public class CustomNavigationPageRenderer : NavigationRenderer 
    { 
     public CustomNavigationPageRenderer() 
     { 
      // UINavigationBar.Appearance.SetBackgroundImage (UIImage.FromFile ("navbg.png"), UIBarMetrics.Default); 
     } 

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

      var nb = (NavigationalPageCustomized) Element; 

      if (nb != null) 
      { 
       nb.BarBackgroundColorR = UIColor.White; 
      } 
     } 
    } 
    } 

ответ

2

Раньше требуется пользовательский визуализатор, но больше не делает в XF 1.3. Теперь NavigationPage имеет свойства BarBackgroundColor и BarTextColor, которые, похоже, работают хорошо. К сожалению, нет возможности изменять шрифт, но без специального рендеринга (который я нашел).

+0

Ive, упомянутый в моем сообщении, я смог установить цвет навигационного бара, также показать на картинке. Проблема iOS имеет собственный цвет фона (по умолчанию - черный). Я пытаюсь установить этот цвет на белый, поэтому он не оставляет ни одной строки, как на рис. – user4015632

3

Попробуйте использовать следующий код. Удачи

[assembly: ExportRenderer (typeof (CustomNavigationalPage), typeof (CustomNavigationPageRenderer))] 

namespace project.iOS 
{ 
    public class CustomNavigationPageRenderer : NavigationRenderer 
    { 
     public CustomNavigationPageRenderer() 
     { 

     } 
     public override void ViewDidLoad() 
     { 
      base.ViewDidLoad(); 
      //Background image 
      this.NavigationBar.BarTintColor = UIColor.FromPatternImage (UIImage.FromFile ("AnyResourceImage.png")); 
      //Your desire color 
      this.NavigationBar.BarTintColor = UIColor.Red; 
      //Right item color 
      this.NavigationBar.TopItem.RightBarButtonItem.TintColor = UIColor.FromPatternImage (UIImage.FromFile ("AnyResourceImage.png")); 
      //Left item color 
      this.NavigationBar.TopItem.LeftBarButtonItem.TintColor = UIColor.Black; 
     } 
    } 
} 

//Note : Please remove any background color you set in forms shared or pcl project. Hint in this class > CustomNavigationalPage 
+0

. Для меня работают Bg img и настройка цвета кнопок, однако цвет цвета bg или оттенка панели по-прежнему остается в строке, как в [img] (http://s17.postimg.org/wriz1kn6n/image.png). Я пытаюсь получить цвет bg, например, скайп iphone app, например [this] (http://s2.postimg.org/h4xiw98i1/image.png) – user4015632

+0

Я считаю, что его нижняя линия волос. Я не совсем уверен, как удалить этот – user4015632

-1

NavigationController.NavigationBar.TitleTextAttributes = новые UIStringAttributes() {ForegroundColor = UIColor.White};

8

Попробуйте использовать этот код в PCL от Xamarin.forms. Изменить код в конструктор App.xaml.cs.

public App() 
{ 
    MainPage = new NavigationPage(new Page1()) 
    { 
     BarBackgroundColor = Color.Gray 
    }; 
}