应用渐变工具栏时,IOS工具栏图标颜色正在更改

时间:2019-01-08 10:05:25

标签: xamarin.forms

我正在使用Xamarin.Forms开发IOS应用程序,并且已经使用自定义渲染器将工具栏颜色自定义为渐变颜色。但是,此后,图标 颜色根据工具栏颜色以及如何将标题文本设置为白色而改变。这是我用于工具栏自定义的渲染器

public class NavigationPageGradientHeaderRenderer:NavigationRenderer
{
    public override void ViewWillAppear(bool animated)
    {
        base.ViewWillAppear(animated);

        var control = (NavigationPageGradientHeader)this.Element;

        var gradientLayer = new CAGradientLayer();
        gradientLayer.Bounds = NavigationBar.Bounds;
        gradientLayer.Colors = new CGColor[] { control.RightColor.ToCGColor(), control.LeftColor.ToCGColor() };
        gradientLayer.StartPoint = new CGPoint(0.0, 0.5);
        gradientLayer.EndPoint = new CGPoint(1.0, 0.5);

        UIGraphics.BeginImageContext(gradientLayer.Bounds.Size);
        gradientLayer.RenderInContext(UIGraphics.GetCurrentContext());
        UIImage image = UIGraphics.GetImageFromCurrentImageContext();
        UIGraphics.EndImageContext();

        NavigationBar.SetBackgroundImage(image, UIBarMetrics.Default);
    }
}

应用此图标后,图标如下所示: enter image description here

但是我希望图像背景像这样透明: enter image description here 标题文字颜色应为白色。

我该如何实现?有人可以帮我吗?

谢谢

2 个答案:

答案 0 :(得分:0)

如果您创建一个NavigationPage,则可以这样使用

  var myHomePage = new NavigationPage(dashboardPage){

  Tint = Color.Red // put your color here };

您可以从App.xaml.cs设置常用颜色;

public App()
    {
        InitializeComponent();

        // MainPage = new MainPage(); 
        MainPage = new RESTAPICallApp.Controllers.HomePage();
        NavigationPage navigationRootPage = new NavigationPage(new RESTAPICallApp.Controllers.HomePage());
        navigationRootPage.BarBackgroundColor = Color.LightSeaGreen;
        navigationRootPage.BarTextColor = Color.Wheat;
        MainPage = navigationRootPage;            
    }

对于本机Xamarin.iOS,将此代码添加到AppDelegate.cs上的'didFinishLaunchingWithOptions'方法中;

 UINavigationBar.Appearance.Translucent = false;
 UINavigationBar.appearance().barTintColor = UIColor.White
 UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes() {
        TextColor = UIColor.White,
        TextShadowColor = UIColor.Clear
    }); 

答案 1 :(得分:0)

您可以在CustomRenderer

中设置属性
public override void ViewWillAppear(bool animated)
    {
        base.ViewWillAppear(animated);

        var control = (MyNativePage)Element;

        var gradientLayer = new CAGradientLayer();
        gradientLayer.Bounds = NavigationBar.Bounds;
        gradientLayer.Colors = new CGColor[] { UIColor.Red.CGColor,UIColor.White.CGColor };
        gradientLayer.StartPoint = new CGPoint(0.0, 0.5);
        gradientLayer.EndPoint = new CGPoint(1.0, 0.5);

        UIGraphics.BeginImageContext(gradientLayer.Bounds.Size);
        gradientLayer.RenderInContext(UIGraphics.GetCurrentContext());
        UIImage image = UIGraphics.GetImageFromCurrentImageContext();
        UIGraphics.EndImageContext();

        NavigationBar.SetBackgroundImage(image, UIBarMetrics.Default);


        NavigationBar.TintColor = UIColor.White;
        NavigationBar.TitleTextAttributes = new UIStringAttributes() { ForegroundColor =UIColor.White};

    }