diff --git a/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs b/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs
index 5b3ed42585fc..7df28c256b1d 100644
--- a/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs
+++ b/src/Controls/src/Core/Handlers/Items/iOS/SelectableItemsViewController.cs
@@ -45,6 +45,7 @@ internal void SelectItem(object selectedItem)
CollectionView.PerformBatchUpdates(null, _ =>
{
CollectionView.SelectItem(index, true, UICollectionViewScrollPosition.None);
+ CollectionView.CellForItem(index)?.UpdateSelectedAccessibility(true);
});
}
}
@@ -75,6 +76,8 @@ void FormsSelectItem(NSIndexPath indexPath)
ItemsView.SelectedItems.Add(GetItemAtIndex(indexPath));
break;
}
+
+ CollectionView.CellForItem(indexPath)?.UpdateSelectedAccessibility(true);
}
void FormsDeselectItem(NSIndexPath indexPath)
@@ -91,6 +94,8 @@ void FormsDeselectItem(NSIndexPath indexPath)
ItemsView.SelectedItems.Remove(GetItemAtIndex(indexPath));
break;
}
+
+ CollectionView.CellForItem(indexPath)?.UpdateSelectedAccessibility(false);
}
internal void UpdatePlatformSelection()
@@ -130,6 +135,10 @@ internal void UpdateSelectionMode()
{
var mode = ItemsView.SelectionMode;
+ // We want to make sure we clear the selection trait before we switch modes.
+ // If we do this after we switch modes, cells that are selected may not show up as selected anymore.
+ CollectionView.ClearSelectedAccessibilityTraits(CollectionView.GetIndexPathsForSelectedItems());
+
switch (mode)
{
case SelectionMode.None:
diff --git a/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs b/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs
index 6909afabc29a..b3dda6f95f87 100644
--- a/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs
+++ b/src/Controls/src/Core/Handlers/Items2/iOS/SelectableItemsViewController2.cs
@@ -45,6 +45,7 @@ internal void SelectItem(object selectedItem)
CollectionView.PerformBatchUpdates(null, _ =>
{
CollectionView.SelectItem(index, true, UICollectionViewScrollPosition.None);
+ CollectionView.CellForItem(index)?.UpdateSelectedAccessibility(true);
});
}
}
@@ -75,6 +76,8 @@ void FormsSelectItem(NSIndexPath indexPath)
ItemsView.SelectedItems.Add(GetItemAtIndex(indexPath));
break;
}
+
+ CollectionView.CellForItem(indexPath)?.UpdateSelectedAccessibility(true);
}
void FormsDeselectItem(NSIndexPath indexPath)
@@ -91,6 +94,8 @@ void FormsDeselectItem(NSIndexPath indexPath)
ItemsView.SelectedItems.Remove(GetItemAtIndex(indexPath));
break;
}
+
+ CollectionView.CellForItem(indexPath)?.UpdateSelectedAccessibility(false);
}
internal void UpdatePlatformSelection()
@@ -130,6 +135,10 @@ internal void UpdateSelectionMode()
{
var mode = ItemsView.SelectionMode;
+ // We want to make sure we clear the selection trait before we switch modes.
+ // If we do this after we switch modes, cells that are selected may not show up as selected anymore.
+ CollectionView.ClearSelectedAccessibilityTraits(CollectionView.GetIndexPathsForSelectedItems());
+
switch (mode)
{
case SelectionMode.None:
diff --git a/src/Controls/src/Core/Platform/iOS/Extensions/AcessibilityExtensions.cs b/src/Controls/src/Core/Platform/iOS/Extensions/AcessibilityExtensions.cs
index 304bdca3ecce..649b5e2ce0f0 100644
--- a/src/Controls/src/Core/Platform/iOS/Extensions/AcessibilityExtensions.cs
+++ b/src/Controls/src/Core/Platform/iOS/Extensions/AcessibilityExtensions.cs
@@ -2,8 +2,48 @@
namespace Microsoft.Maui.Controls.Platform;
-internal static class AcessibilityExtensions
+internal static class AccessibilityExtensions
{
+ internal static void UpdateSelectedAccessibility(this UICollectionViewCell cell, bool selected)
+ {
+ // Catalyst and iOS Simulators applies/removes the 'Selected' trait to the cell automatically.
+ // iOS Devices do not apply the 'Selected' trait automatically to the cell unless VoiceOver is on.
+ // On iOS, the 'Selected' trait needs to be applied to the first child of the cell for VoiceOver to announce it.
+#if IOS
+ if (cell.ContentView is not null && cell.ContentView.Subviews.Length > 0)
+ {
+ var firstChild = cell.ContentView.Subviews[0];
+
+ if (selected)
+ {
+ firstChild.AccessibilityTraits |= UIAccessibilityTrait.Selected;
+ }
+ else
+ {
+ firstChild.AccessibilityTraits &= ~UIAccessibilityTrait.Selected;
+ }
+ }
+#endif
+ }
+
+ internal static void ClearSelectedAccessibilityTraits(this UICollectionView collectionView, Foundation.NSIndexPath[] indices)
+ {
+ // Catalyst and iOS Simulators applies/removes the 'Selected' trait to the cell automatically.
+ // iOS Devices do not apply the 'Selected' trait automatically to the cell unless VoiceOver is on.
+ // On iOS, the 'Selected' trait needs to be applied to the first child of the cell for VoiceOver to announce it.
+#if IOS
+ foreach (var index in indices)
+ {
+ var cell = collectionView.CellForItem(index);
+ if (cell?.ContentView is not null && cell.ContentView.Subviews.Length > 0)
+ {
+ var firstChild = cell.ContentView.Subviews[0];
+ firstChild.AccessibilityTraits &= ~UIAccessibilityTrait.Selected;
+ }
+ }
+#endif
+ }
+
internal static void UpdateAccessibilityTraits(this UICollectionView collectionView, SelectableItemsView itemsView)
{
foreach (var subview in collectionView.Subviews)
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue21375.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375.xaml
new file mode 100644
index 000000000000..7723a38eec01
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375.xaml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue21375.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375.xaml.cs
new file mode 100644
index 000000000000..838025368a2e
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375.xaml.cs
@@ -0,0 +1,104 @@
+using System.Collections.ObjectModel;
+using System.Text;
+
+#if ANDROID
+using AndroidX.RecyclerView.Widget;
+#endif
+
+namespace Maui.Controls.Sample.Issues;
+
+[Issue(IssueTracker.Github, 21375, "Selected CollectionView item is not announced", PlatformAffected.iOS & PlatformAffected.macOS & PlatformAffected.Android)]
+public partial class Issue21375 : ContentPage
+{
+ public ObservableCollection- Items { get; set; }
+
+ public Issue21375()
+ {
+ InitializeComponent();
+
+ Items = new ObservableCollection
-
+ {
+ new Item { Name = "Item 1", Description = "Description for item 1" },
+ new Item { Name = "Item 2", Description = "Description for item 2" },
+ new Item { Name = "Item 3", Description = "Description for item 3" },
+ new Item { Name = "Item 4", Description = "Description for item 4" },
+ new Item { Name = "Item 5", Description = "Description for item 5" }
+ };
+
+ BindingContext = this;
+ }
+
+ void NoneSelectionMode(object sender, EventArgs e)
+ {
+ collectionView.SelectionMode = SelectionMode.None;
+ }
+
+ void SingleSelectionMode(object sender, EventArgs e)
+ {
+ collectionView.SelectionMode = SelectionMode.Single;
+ }
+
+ void MultipleSelectionMode(object sender, EventArgs e)
+ {
+ collectionView.SelectionMode = SelectionMode.Multiple;
+ }
+
+ void Calculate(object sender, EventArgs e)
+ {
+ var sb = new StringBuilder();
+#if IOS || MACCATALYST
+ if (collectionView.Handler?.PlatformView is UIKit.UIView vc
+ && vc.Subviews is UIKit.UIView[] subviews && subviews.Length > 0
+ && subviews[0] is UIKit.UICollectionView uiCollectionView)
+ {
+ for (int i = 0; i < uiCollectionView.VisibleCells.Length; i++)
+ {
+ var cell = uiCollectionView.VisibleCells[i];
+ sb.AppendLine($"Item{i} Cell: {cell.AccessibilityTraits}");
+ if (cell.ContentView is not null && cell.ContentView.Subviews.Length > 0)
+ {
+ var firstChild = cell.ContentView.Subviews[0];
+ sb.AppendLine($"Item{i} FirstChild: {firstChild.AccessibilityTraits}");
+ }
+ }
+ }
+#elif ANDROID
+ var plat = collectionView.Handler?.PlatformView;
+ if (plat is RecyclerView recyclerView)
+ {
+ var adapter = recyclerView.GetAdapter();
+ var layoutManager = recyclerView.GetLayoutManager();
+ var childCount = layoutManager.ChildCount;
+ for (int i = 0; i < childCount; i++)
+ {
+ var viewHolder = recyclerView.GetChildAt(i);
+ if (viewHolder is null)
+ continue;
+
+ var position = recyclerView.GetChildAdapterPosition(viewHolder);
+ sb.AppendLine($"Item{position} Cell: {viewHolder.Selected}");
+ }
+ }
+#elif WINDOWS
+ var plat = collectionView.Handler?.PlatformView;
+ if (plat is Microsoft.UI.Xaml.Controls.ListView listView)
+ {
+ foreach (var item in listView.Items)
+ {
+ var container = listView.ContainerFromItem(item) as Microsoft.UI.Xaml.Controls.ListViewItem;
+ if (container != null)
+ {
+ sb.AppendLine($"Item: {item} IsSelected: {container.IsSelected}");
+ }
+ }
+ }
+#endif
+ Output.Text = sb.ToString();
+ }
+
+ public class Item
+ {
+ public string Name { get; set; }
+ public string Description { get; set; }
+ }
+}
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue21375_2.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375_2.xaml
new file mode 100644
index 000000000000..66de9e6ae2e5
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375_2.xaml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue21375_2.xaml.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375_2.xaml.cs
new file mode 100644
index 000000000000..e5054d7529b1
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue21375_2.xaml.cs
@@ -0,0 +1,70 @@
+using System.Collections.ObjectModel;
+using System.Text;
+
+namespace Maui.Controls.Sample.Issues;
+
+[Issue(IssueTracker.Github, 21375_2, "Selected CollectionView2 item is not announced", PlatformAffected.iOS & PlatformAffected.macOS)]
+public partial class Issue21375_2 : ContentPage
+{
+ public ObservableCollection
- Items { get; set; }
+
+ public Issue21375_2()
+ {
+ InitializeComponent();
+
+ Items = new ObservableCollection
-
+ {
+ new Item { Name = "Item 1", Description = "Description for item 1" },
+ new Item { Name = "Item 2", Description = "Description for item 2" },
+ new Item { Name = "Item 3", Description = "Description for item 3" },
+ new Item { Name = "Item 4", Description = "Description for item 4" },
+ new Item { Name = "Item 5", Description = "Description for item 5" }
+ };
+
+ BindingContext = this;
+ }
+
+ void NoneSelectionMode(object sender, EventArgs e)
+ {
+ collectionView.SelectionMode = SelectionMode.None;
+ }
+
+ void SingleSelectionMode(object sender, EventArgs e)
+ {
+ collectionView.SelectionMode = SelectionMode.Single;
+ }
+
+ void MultipleSelectionMode(object sender, EventArgs e)
+ {
+ collectionView.SelectionMode = SelectionMode.Multiple;
+ }
+
+ void Calculate(object sender, EventArgs e)
+ {
+ var sb = new StringBuilder();
+#if IOS || MACCATALYST
+ if (collectionView.Handler?.PlatformView is UIKit.UIView vc
+ && vc.Subviews is UIKit.UIView[] subviews && subviews.Length > 0
+ && subviews[0] is UIKit.UICollectionView uiCollectionView)
+ {
+ for (int i = 0; i < uiCollectionView.VisibleCells.Length; i++)
+ {
+ var cell = uiCollectionView.VisibleCells[i];
+ sb.AppendLine($"Item{i} Cell: {cell.AccessibilityTraits}");
+ if (cell.ContentView is not null && cell.ContentView.Subviews.Length > 0)
+ {
+ var firstChild = cell.ContentView.Subviews[0];
+ sb.AppendLine($"Item{i} FirstChild: {firstChild.AccessibilityTraits}");
+ }
+ }
+ }
+#endif
+ Output.Text = sb.ToString();
+ }
+
+ public class Item
+ {
+ public string Name { get; set; }
+ public string Description { get; set; }
+ }
+}
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_multiple.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_multiple.png
new file mode 100644
index 000000000000..cbe5586c6382
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_multiple.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_none.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_none.png
new file mode 100644
index 000000000000..610d77086f82
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_none.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_single.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_single.png
new file mode 100644
index 000000000000..7c36a257d1bc
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected2_single.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_multiple.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_multiple.png
new file mode 100644
index 000000000000..9aaecd0ae4b8
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_multiple.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_none.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_none.png
new file mode 100644
index 000000000000..ffd053e7361d
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_none.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_single.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_single.png
new file mode 100644
index 000000000000..5b1d480a4c0b
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SelectedItemsShowSelected_single.png differ
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue21375.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue21375.cs
new file mode 100644
index 000000000000..08cc2a57b78d
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue21375.cs
@@ -0,0 +1,56 @@
+#if !ANDROID
+using NUnit.Framework;
+using NUnit.Framework.Legacy;
+using UITest.Appium;
+using UITest.Core;
+using System.Text;
+
+namespace Microsoft.Maui.TestCases.Tests.Issues;
+
+public class Issue21375 : _IssuesUITest
+{
+ public Issue21375(TestDevice device) : base(device) { }
+
+ public override string Issue => "Selected CollectionView item is not announced";
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void SelectedItemsShowSelected ()
+ {
+ var collectionView = App.WaitForElement("collectionView");
+ var centerX = collectionView.GetRect().X + (collectionView.GetRect().Width / 2);
+ var firstItemY = collectionView.GetRect().Y + 25;
+ var secondItemY = collectionView.GetRect().Y + 75;
+ var thirdItemY = collectionView.GetRect().Y + 125;
+
+ App.TapCoordinates(centerX, firstItemY);
+ App.WaitForElement("calculateButton").Tap();
+
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_single");
+
+ App.WaitForElement("multipleButton").Tap();
+ App.TapCoordinates(centerX, secondItemY);
+ App.TapCoordinates(centerX, thirdItemY);
+ App.WaitForElement("calculateButton").Tap();
+
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_multiple");
+
+ App.WaitForElement("noneButton").Tap();
+ App.WaitForElement("calculateButton").Tap();
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_none");
+
+ App.WaitForElement("singleButton").Tap();
+ App.WaitForElement("calculateButton").Tap();
+
+#if !WINDOWS // Windows clears out the selected items when we switch back
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_single");
+
+ App.WaitForElement("multipleButton").Tap();
+ App.WaitForElement("calculateButton").Tap();
+
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_multiple");
+#endif
+
+ }
+}
+#endif
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue21375_2.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue21375_2.cs
new file mode 100644
index 000000000000..ec99c6943709
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue21375_2.cs
@@ -0,0 +1,48 @@
+#if IOS || MACCATALYST
+using NUnit.Framework;
+using NUnit.Framework.Legacy;
+using UITest.Appium;
+using UITest.Core;
+using System.Text;
+
+namespace Microsoft.Maui.TestCases.Tests.Issues;
+
+public class Issue21375_2 : _IssuesUITest
+{
+ public Issue21375_2(TestDevice device) : base(device) { }
+
+ public override string Issue => "Selected CollectionView2 item is not announced";
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void SelectedItemsShowSelected2()
+ {
+ var collectionView = App.WaitForElement("collectionView");
+ var centerX = collectionView.GetRect().X + (collectionView.GetRect().Width / 2);
+ var firstItemY = collectionView.GetRect().Y + 25;
+ var secondItemY = collectionView.GetRect().Y + 75;
+ var thirdItemY = collectionView.GetRect().Y + 125;
+
+ App.TapCoordinates(centerX, firstItemY);
+ App.WaitForElement("calculateButton").Tap();
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_single");
+
+ App.WaitForElement("multipleButton").Tap();
+ App.TapCoordinates(centerX, secondItemY);
+ App.TapCoordinates(centerX, thirdItemY);
+ App.WaitForElement("calculateButton").Tap();
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_multiple");
+
+ App.WaitForElement("noneButton").Tap();
+ App.WaitForElement("calculateButton").Tap();
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_none");
+
+ App.WaitForElement("singleButton").Tap();
+ App.WaitForElement("calculateButton").Tap();
+
+ App.WaitForElement("multipleButton").Tap();
+ App.WaitForElement("calculateButton").Tap();
+ VerifyScreenshot(TestContext.CurrentContext.Test.MethodName + "_multiple");
+ }
+}
+#endif
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_multiple.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_multiple.png
new file mode 100644
index 000000000000..a5042cb11c30
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_multiple.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_none.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_none.png
new file mode 100644
index 000000000000..7c51e889dcb8
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_none.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_single.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_single.png
new file mode 100644
index 000000000000..ca7c6ad59a38
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/SelectedItemsShowSelected_single.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_multiple.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_multiple.png
new file mode 100644
index 000000000000..943013714133
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_multiple.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_none.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_none.png
new file mode 100644
index 000000000000..de61e2828b06
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_none.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_single.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_single.png
new file mode 100644
index 000000000000..acfc09d5d1b3
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected2_single.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_multiple.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_multiple.png
new file mode 100644
index 000000000000..7dcd54b9a748
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_multiple.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_none.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_none.png
new file mode 100644
index 000000000000..a5239d7f9b5c
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_none.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_single.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_single.png
new file mode 100644
index 000000000000..9d0e1e9ae282
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SelectedItemsShowSelected_single.png differ