Xamarin - 渐变背景

时间:2017-02-13 17:04:01

标签: xamarin xamarin.ios

我正在尝试以编程方式在Xamarin iOS中设置这样的背景渐变:

CGColor[] colors = new CGColor[] { new UIColor(red: 0.05f, green:0.44f, blue:0.73f, alpha:1.0f).CGColor,
                new UIColor(red: 45/255, green: 128 / 255, blue: 153 / 255, alpha: 0.01f ).CGColor};
            CAGradientLayer gradientLayer = new CAGradientLayer();
            gradientLayer.Frame = this.View.Bounds;
            gradientLayer.Colors = colors;
            this.View.Layer.AddSublayer(gradientLayer);

它可以工作,但我在屏幕上有表格元素(标签,按钮等),这导致所有这些元素显得褪色,好像图层直接出现在的顶部元素。我认为这就是代码正在做的事情 - 它渲染整个页面,然后在屏幕顶部添加具有不透明度的图层(我希望它背后)。

我想要的是将背景设置为渐变,但我添加的任何元素都不会褪色并尝试匹配背景颜色。

我尝试在标准视图的顶部添加一个视图,并将alpha设置为1,将背景设置为白色,但这似乎没有帮助(这表明我的理论是以编程方式在它之后的所有内容上添加一层呈现)。

我做错了什么?  谢谢!

2 个答案:

答案 0 :(得分:3)

我知道我为演出迟到了,但为了将来参考,我使用:

this.View.Layer.InsertSublayer(gradientLayer, 0);

0代表索引。

答案 1 :(得分:1)

正在显示分配给View的根ViewController的渐变图层"后面的"所有其他观点。

默认情况下,视图(UILabel,UIButton等)没有背景颜色集,因此混合与该背景图层,如果这不是您要寻找的效果,则指定他们的背景:

enter image description here

var button = new UIButton(UIButtonType.System);
button.Frame = new CGRect(40, 300, 120, 40);
button.SetTitle("No Background", UIControlState.Normal);
button.TintColor = UIColor.Red;
View.AddSubview(button);

var button2 = new UIButton(UIButtonType.System);
button2.Frame = new CGRect(180, 300, 100, 40);
button2.SetTitle("Background", UIControlState.Normal);
button2.TintColor = UIColor.Red;
button2.BackgroundColor = UIColor.White;
View.AddSubview(button2);