diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue14397.cs b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue14397.cs
new file mode 100644
index 00000000000..859cb06c416
--- /dev/null
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Issue14397.cs
@@ -0,0 +1,64 @@
+using Xamarin.Forms.CustomAttributes;
+using Xamarin.Forms.Internals;
+
+
+#if UITEST
+using Xamarin.UITest;
+using NUnit.Framework;
+using Xamarin.Forms.Core.UITests;
+#endif
+
+namespace Xamarin.Forms.Controls.Issues
+{
+ [Preserve(AllMembers = true)]
+ [Issue(IssueTracker.Github, 14397, "[Bug] iOS Background appears in front of image",
+ PlatformAffected.iOS)]
+#if UITEST
+ [NUnit.Framework.Category(UITestCategories.Image)]
+#endif
+ public class Issue14397 : TestContentPage
+ {
+ public Issue14397()
+ {
+ Title = "Issue 14397";
+
+ var layout = new StackLayout();
+
+ var instructions = new Label
+ {
+ Padding = 12,
+ Text = "If can see the icon with the gradient background, the test has passed."
+ };
+
+ var image = new Image
+ {
+ HorizontalOptions = LayoutOptions.Start,
+ HeightRequest = 100,
+ WidthRequest = 100,
+ Source = "coffee.png",
+ Margin = new Thickness(12, 0)
+ };
+
+ image.Background = new LinearGradientBrush
+ {
+ StartPoint = new Point(0, 0),
+ EndPoint = new Point(1, 0),
+ GradientStops = new GradientStopCollection
+ {
+ new GradientStop { Color = Color.OrangeRed, Offset = 0.0f },
+ new GradientStop { Color = Color.PaleVioletRed, Offset = 0.9f },
+ }
+ };
+
+ layout.Children.Add(instructions);
+ layout.Children.Add(image);
+
+ Content = layout;
+ }
+
+ protected override void Init()
+ {
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
index cc62cfd74d4..5ea66557e50 100644
--- a/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
+++ b/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issues.Shared/Xamarin.Forms.Controls.Issues.Shared.projitems
@@ -1827,6 +1827,7 @@
+
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/ImageRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/ImageRenderer.cs
index 557b1584231..4f76b51a638 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/ImageRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/ImageRenderer.cs
@@ -1,5 +1,4 @@
using System;
-using System.Drawing;
using System.ComponentModel;
using System.IO;
using System.Threading;
@@ -72,6 +71,7 @@ protected override async void OnElementChanged(ElementChangedEventArgs e)
}
await TrySetImage(e.OldElement as Image);
+ UpdateBackground();
}
base.OnElementChanged(e);
@@ -83,6 +83,8 @@ protected override async void OnElementPropertyChanged(object sender, PropertyCh
if (e.PropertyName == Image.SourceProperty.PropertyName)
await TrySetImage().ConfigureAwait(false);
+ else if (e.PropertyName == VisualElement.BackgroundProperty.PropertyName)
+ UpdateBackground();
}
protected virtual async Task TrySetImage(Image previous = null)
@@ -115,8 +117,17 @@ protected async Task SetImage(Image oldElement = null)
bool IImageVisualElementRenderer.IsDisposed => _isDisposed;
UIImageView IImageVisualElementRenderer.GetImage() => Control;
- }
+ void UpdateBackground()
+ {
+ var parent = Control.Superview;
+
+ if (parent == null)
+ return;
+
+ parent.UpdateBackground(Element.Background);
+ }
+ }
public interface IImageSourceHandler : IRegisterable
{
diff --git a/Xamarin.Forms.Platform.iOS/ViewRenderer.cs b/Xamarin.Forms.Platform.iOS/ViewRenderer.cs
index 0fe78f9b247..91e92d37411 100644
--- a/Xamarin.Forms.Platform.iOS/ViewRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/ViewRenderer.cs
@@ -215,6 +215,10 @@ protected override void SetBackground(Brush brush)
if (IsElementOrControlEmpty)
return;
+ // Updated in the ImageRenderer
+ if (Element is Image)
+ return;
+
Control.UpdateBackground(brush);
}