如何在 iOS 的 xamarin 表单中创建渐变按钮背景

Posted

技术标签:

【中文标题】如何在 iOS 的 xamarin 表单中创建渐变按钮背景【英文标题】:How to create gradient button background in xamarin forms for iOS 【发布时间】:2015-11-24 11:53:20 【问题描述】:

我正在 Xamarin 表单中创建一个需要渐变按钮背景的 iPhone 应用程序。我试过CAGradientLayer。但是,它不适用于按钮。

谁能帮我解决这个问题? 这是我的按钮渲染器:

    protected override void OnElementChanged (ElementChangedEventArgs<Button> e)
    
        base.OnElementChanged (e);

        if(e.OldElement == null)
        

            btn = (UIButton) Control;
            btn.Frame = new RectangleF (0, 0, (float)this.Element.WidthRequest, (float)this.Element.HeightRequest);
            CAGradientLayer btnGradient = new CAGradientLayer ();
            btnGradient.Frame = btn.Bounds;
            btnGradient.Colors = new CGColor[] Color.White.ToCGColor(), Color.FromHex("#0073BD").ToCGColor() ;
            btn.Layer.InsertSublayer (btnGradient, 0);
            btn.Layer.MasksToBounds = true;
            btn.Layer.BorderColor = Color.FromHex("#0073BE").ToCGColor();
            btn.Layer.BorderWidth = 1;
            btn.SetTitleColor(Color.Black.ToUIColor (), UIControlState.Normal);
        
    

【问题讨论】:

你能发布你的自定义渲染器吗? 【参考方案1】:

我建议只在前面制作渐变图像并直接使用它们,除非您需要在运行时动态创建渐变。如果您走图像路线,那么您将执行以下操作:

var regImg = UIImage.FromBundle("myimage.png").ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);
var selImg = UIImage.FromBundle("myimage_selected.png").ImageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal);

Control.SetBackgroundImage(regImg, UIControlState.Normal);
Control.SetBackgroundImage(selImg, UIControlState.Highlighted);

如果您仍想使用动态创建的渐变路线,请查看这篇文章 - 您会看到他正在通过他创建的 ImageWithColor() 方法动态创建他的图像:

https://forums.xamarin.com/discussion/32240/set-buttontype-in-buttonrenderer-ios-specific

最后,请确保您将按钮的 ImageType 设置为自定义 - 我没有看到您在渲染器中进行设置,并且默认情况下 iOS 会在 iOS7 之后绘制无边框按钮。

【讨论】:

以上是关于如何在 iOS 的 xamarin 表单中创建渐变按钮背景的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Xamarin 中创建几个屏幕,然后将它们导入 iOS 和 Android 项目?

Xamarin表单 - 如何使用标题生成iOS ListView本机分组样式?

Xamarin-如何以编程方式扩展列表视图?

如何在 Flutter for android 中创建这种线性渐变不透明度效果?

如何在 xamarin 跨平台应用程序中创建具有 sqlite 支持的 PCL

在 Xamarin.Forms 中创建 UI 元素