From cd7837ec6d72e8fe645ab9e906ba44162c839c7b Mon Sep 17 00:00:00 2001 From: SuthiYuvaraj <92777079+SuthiYuvaraj@users.noreply.github.com> Date: Mon, 13 Jan 2025 12:27:10 +0530 Subject: [PATCH 01/14] Fix for 26810 --- .../Handlers/Items/Android/MauiRecyclerView.cs | 11 ++--------- .../src/Core/Handlers/Items/iOS/ItemsViewLayout.cs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/Controls/src/Core/Handlers/Items/Android/MauiRecyclerView.cs b/src/Controls/src/Core/Handlers/Items/Android/MauiRecyclerView.cs index ab43bb156c0a..4bae74e49e5c 100644 --- a/src/Controls/src/Core/Handlers/Items/Android/MauiRecyclerView.cs +++ b/src/Controls/src/Core/Handlers/Items/Android/MauiRecyclerView.cs @@ -374,15 +374,8 @@ protected virtual void UpdateItemsUpdatingScrollMode() if (ItemsViewAdapter == null || ItemsView == null) return; - if (ItemsView.ItemsUpdatingScrollMode == ItemsUpdatingScrollMode.KeepItemsInView) - { - // Keeping the current items in view is the default, so we don't need to watch for data changes - _itemsUpdateScrollObserver.Stop(ItemsViewAdapter); - } - else - { - _itemsUpdateScrollObserver.Start(ItemsViewAdapter); - } + // We need to observe the adapter for changes for the ItemsUpdatingScrollMode. + _itemsUpdateScrollObserver.Start(ItemsViewAdapter); } public virtual void ScrollTo(ScrollToRequestEventArgs args) diff --git a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs index c6f8473b629d..c57be4802432 100644 --- a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs +++ b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs @@ -500,6 +500,10 @@ public override void FinalizeCollectionViewUpdates() { ForceScrollToLastItem(CollectionView, _itemsLayout); } + else if (ItemsUpdatingScrollMode == ItemsUpdatingScrollMode.KeepItemsInView) + { + ForceScrollToFirstItem(CollectionView, _itemsLayout); + } } void TrackOffsetAdjustment() @@ -565,6 +569,16 @@ static bool UpdateWillShiftVisibleItems(UICollectionView collectionView, UIColle return false; } + //Fix Added for ItemsUpdatingScrollMode.KeepItemsInView + void ForceScrollToFirstItem(UICollectionView collectionView, ItemsLayout itemsLayout) + { + if (collectionView.NumberOfItemsInSection(0) > 0) + { + var indexPath = NSIndexPath.FromItemSection(0, 0); + collectionView.ScrollToItem(indexPath, UICollectionViewScrollPosition.Top, true); + } + } + static void ForceScrollToLastItem(UICollectionView collectionView, ItemsLayout itemsLayout) { var sections = (int)collectionView.NumberOfSections(); From ffd2647d558d513ddda4f415e8b799470e764d32 Mon Sep 17 00:00:00 2001 From: SuthiYuvaraj <92777079+SuthiYuvaraj@users.noreply.github.com> Date: Mon, 13 Jan 2025 19:20:01 +0530 Subject: [PATCH 02/14] Update ItemsViewLayout.cs --- .../src/Core/Handlers/Items/iOS/ItemsViewLayout.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs index c57be4802432..fd924541a02d 100644 --- a/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs +++ b/src/Controls/src/Core/Handlers/Items/iOS/ItemsViewLayout.cs @@ -572,6 +572,13 @@ static bool UpdateWillShiftVisibleItems(UICollectionView collectionView, UIColle //Fix Added for ItemsUpdatingScrollMode.KeepItemsInView void ForceScrollToFirstItem(UICollectionView collectionView, ItemsLayout itemsLayout) { + var sections = (int)collectionView.NumberOfSections(); + + if (sections == 0) + { + return; + } + if (collectionView.NumberOfItemsInSection(0) > 0) { var indexPath = NSIndexPath.FromItemSection(0, 0); From df7a2e3f27c0804e49ca52f30a74ecd48c3d8e43 Mon Sep 17 00:00:00 2001 From: SuthiYuvaraj <92777079+SuthiYuvaraj@users.noreply.github.com> Date: Wed, 15 Jan 2025 19:43:00 +0530 Subject: [PATCH 03/14] TestCases for 26810 --- .../TestCases.HostApp/Issues/Issue26810.xaml | 30 ++++++++++++ .../Issues/Issue26810.xaml.cs | 47 +++++++++++++++++++ .../Tests/Issues/Issue26810.cs | 29 ++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue26810.xaml create mode 100644 src/Controls/tests/TestCases.HostApp/Issues/Issue26810.xaml.cs create mode 100644 src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue26810.cs diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue26810.xaml b/src/Controls/tests/TestCases.HostApp/Issues/Issue26810.xaml new file mode 100644 index 000000000000..753456a78d9a --- /dev/null +++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue26810.xaml @@ -0,0 +1,30 @@ + + + +