[iOS] Fix SwipeView stays open on iOS after updating content#31248
[iOS] Fix SwipeView stays open on iOS after updating content#31248kubaflo merged 23 commits intodotnet:inflight/currentfrom
Conversation
This reverts commit 138797f.
|
Hey there @@devanathan-vaithiyanathan! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed. |
There was a problem hiding this comment.
Pull Request Overview
This PR fixes an iOS-specific issue where SwipeView controls remain open after their content is updated in a CollectionView. The issue occurs because iOS reuses cells in CollectionView, maintaining the SwipeView's open state when the BindingContext changes, unlike Android and Windows which create new cells and reset the state.
- Added logic to automatically close SwipeView when BindingContext changes on iOS
- Included comprehensive test case to validate the fix
- Ensures consistent behavior across platforms
Reviewed Changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| src/Controls/src/Core/SwipeView/SwipeView.cs | Added automatic close logic in OnBindingContextChanged to fix iOS cell reuse issue |
| src/Controls/tests/TestCases.HostApp/Issues/Issue19541.cs | Added UI test page with CollectionView and SwipeView to reproduce the issue |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue19541.cs | Added automated test to verify SwipeView closes after collection refresh |
|
Azure Pipelines successfully started running 1 pipeline(s). |
| // When new cells are recreated, the swipe state is reset. | ||
| // When cells are reused (iOS), the open state is maintained. | ||
| // Fix for iOS: Close SwipeView when BindingContext changes to prevent stale open state | ||
| if (_isOpen) |
There was a problem hiding this comment.
Should use a compilation directive and only do this on iOS?
There was a problem hiding this comment.
@jsuarezruiz , Based on suggestion, I have modified the changes.
|
/azp run MAUI-UITests-public |
|
Azure Pipelines successfully started running 1 pipeline(s). |
|
/rebase |
🤖 AI Summary📊 Expand Full Review🔍 Pre-Flight — Context & Validation📝 Review Session — condition added ·
|
| File | Type | Description |
|---|---|---|
src/Controls/src/Core/SwipeView/SwipeView.cs |
Fix | Add close logic in OnBindingContextChanged for iOS/MacCatalyst |
src/Controls/tests/TestCases.HostApp/Issues/Issue19541.cs |
Test | Host app reproduction page |
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue19541.cs |
Test | NUnit UI test |
src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/SwipeItemShouldBeCloseWhenUpdateTheCollectionView.png |
Snapshot | iOS screenshot baseline |
src/Controls/tests/TestCases.Android.Tests/snapshots/android/SwipeItemShouldBeCloseWhenUpdateTheCollectionView.png |
Snapshot | Android screenshot baseline |
src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/SwipeItemShouldBeCloseWhenUpdateTheCollectionView.png |
Snapshot | macOS screenshot baseline |
PR Discussion Summary
| File:Line | Reviewer | Comment | Status |
|---|---|---|---|
| jsuarezruiz | Should use a compilation directive and only do this on iOS? And Catalyst | RESOLVED (author implemented #if IOS || MACCATALYST) |
No other review disagreements or edge cases noted. Azure Pipelines UI tests were run. PR was rebased on 2025-10-10.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #31248 | Close SwipeView in OnBindingContextChanged for iOS/MacCatalyst when `_isOpen == PENDING (Gate) |
SwipeView.cs (+12) |
Original PR | true` |
🚦 Gate — Test Verification
📝 Review Session — condition added · fc467b1
Result PASSED:
Platform: iOS (iPhone 11 Pro simulator)
Mode: Full Verification
- Tests FAIL without fix (bug detected correctly)
- Tests PASS with fix (fix validated)
Test: SwipeItemShouldBeCloseWhenUpdateTheCollectionView in Issue19541
Fix files reverted for test-without-fix run: src/Controls/src/Core/SwipeView/SwipeView.cs
🔧 Fix — Analysis & Comparison
📝 Review Session — condition added · fc467b1
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix | Add IsOpen property mapper on iOS handler; use in handler; set in | PASS | 3 files + 2 API files | More complex; requires new public API surface |
| 2 | try-fix | Unconditionally set and call in (no guard) | PASS | 1 file | Slight risk: fires even when not open |
| 3 | try-fix | Listen for parent CollectionView PropertyChanged and call when open | PASS | 1 file | Targets refresh path directly; couples to CollectionView type |
| 4 | try-fix | Close SwipeView when Parent becomes null in (cell return to reuse pool) | PASS | 1 file | Too broad; fires on any parent detachment, not just ItemsSource refresh |
| PR | PR #31248 | In , close with guard + check via | PASS (Gate) | 1 file (+12 lines) | Most minimal and targeted |
Exhausted: Yes (cross-pollination: all 4 models say NO NEW IDEAS after Round 1)
Selected Fix: PR's It is the most minimal change (single file, 12 lines), correctly platform-gated to iOS/MacCatalyst using compiler directives, guards against unnecessary calls with if (_isOpen), and uses the established ISwipeView interface for requesting close. All alternatives add complexity or have unintended side effects.fix
📋 Report — Final Recommendation
📝 Review Session — condition added · fc467b1
Final Recommendation: APPROVE
Summary
PR #31248 fixes issue #19541 where SwipeView stays open on iOS after CollectionView content is updated. The fix is minimal, targeted, and correctly platform-gated. Gate verification confirmed tests fail without the fix and pass with it. Four independent fix alternatives were explored via try-fix - all passed but the PR's approach is the simplest and most appropriate.
Root Cause
On iOS/MacCatalyst, CollectionView reuses cells (UITableView/UICollectionView cell reuse pattern). When ItemsSource is refreshed, existing cells are recycled and their BindingContext is updated - but the SwipeView._isOpen state from the previous binding persists visually. On Android and Windows, new cells are created on rebind, so _isOpen naturally starts as false.
Fix Quality
The fix is well-designed:
- Minimal: 12 lines added to a single file (
SwipeView.cs) - Platform-gated: Uses
#if IOS || MACCATALYST- correct for this iOS-specific cell reuse behavior - Guarded:
if (_isOpen)prevents unnecessaryRequestClosecalls on already-closed SwipeViews - Uses correct API:
((ISwipeView)this).RequestClose(new SwipeViewCloseRequest(false))- uses the established interface withanimated: false(no animation needed during data refresh) - Well-commented: Explains the platform difference (cell reuse vs new cells)
Test Quality
- HostApp page (
Issue19541.cs): Creates a CollectionView with SwipeViews, with Open and Refresh buttons. Correctly usesAutomationIdfor test automation. - NUnit test: Opens SwipeView, triggers refresh, verifies via screenshot. Simple and direct.
- Platform guard:
#if TEST_FAILS_ON_WINDOWScorrectly excludes Windows (iOS-specific bug). - Snapshots: Added for iOS, Android, and Mac.
Reviewer Thread Status
One review thread from asking for a compilation directive for iOS/Catalyst - already addressed by the author. Thread is marked unresolved in the UI but the code change was made.
Fix Comparison
| Approach | Complexity | Files | Verdict |
|---|---|---|---|
| PRs Minimal | 1 (+12 lines Best | ) | fix |
| Attempt 1 (IsOpen mapper) | High | 3 + 2 API files | New public API required |
| Attempt 2 (unconditional reset) | Low | 1 | Fires even when not open |
| Attempt 3 (ItemsSource listener) | Medium | 1 | Couples to CollectionView |
| Attempt 4 (Parent=null) | Low | 1 | Too broad |
📋 Expand PR Finalization Review
Title: ✅ Good
Current: [iOS] Fix SwipeView stays open on iOS after updating content
Description: ✅ Good
Description needs updates. See details below.
✨ Suggested PR Description
[!NOTE]
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Root Cause
On iOS and Mac Catalyst, UICollectionView reuses cells when the ItemsSource is refreshed. This means the same SwipeView instance is rebound with a new BindingContext while still in the open state (_isOpen = true). The swipe items remain visually open even though the underlying data has changed.
On Android and Windows, new cells are created for each item on rebind, so _isOpen is always false for new instances — no issue.
Description of Change
In SwipeView.OnBindingContextChanged(), added an iOS/MacCatalyst-only check: if the SwipeView is currently open when the BindingContext changes, RequestClose is called (without animation) to reset the open state.
#if IOS || MACCATALYST
if (_isOpen)
{
((ISwipeView)this).RequestClose(new SwipeViewCloseRequest(false));
}
#endifThis closes the stale swipe state before the view is reused with the new binding context.
Key Technical Details
_isOpen— internal field onSwipeViewtracking open stateISwipeView.RequestClose— dispatches to the platform handler viaHandler?.Invoke(...), so it's safe to call even if no handler is attachedSwipeViewCloseRequest(false)—false= no animation, appropriate for a reset during rebind- The
#if IOS || MACCATALYSTconditional is consistent with existing patterns inSwipeView.cs
Issues Fixed
Fixes #19541
Platforms Tested
- Android
- Windows
- iOS
- Mac
Code Review: ✅ Passed
Code Review — PR #31248
🟡 Suggestions
1. Inconsistent field naming in HostApp test (Issue19541.cs)
File: src/Controls/tests/TestCases.HostApp/Issues/Issue19541.cs
_swipeView uses the conventional underscore prefix, but collectionView does not.
// Current (inconsistent)
SwipeView _swipeView;
CollectionView collectionView;
// Suggested (consistent)
SwipeView _swipeView;
CollectionView _collectionView;This is a minor style issue and won't affect functionality.
2. Behavioral edge case: closes on any BindingContext change
File: src/Controls/src/Core/SwipeView/SwipeView.cs
The fix closes the SwipeView whenever _isOpen && BindingContext changes on iOS/MacCatalyst — not just when inside a CollectionView. This means if a user manually updates the BindingContext of a SwipeView that the user intentionally opened (outside of a list), it will be silently closed.
This is a reasonable tradeoff: the reported scenario (CollectionView cell reuse) is the primary and known use case. However, it's a behavior change worth documenting.
Recommendation: The code comment already explains the reasoning well. No code change needed, but the PR description should mention this tradeoff (addressed in recommended-description.md).
3. swipeView_Loaded captures only the first SwipeView
File: src/Controls/tests/TestCases.HostApp/Issues/Issue19541.cs
void swipeView_Loaded(object sender, EventArgs e)
{
if (_swipeView is null)
_swipeView = (SwipeView)sender;
}This assigns _swipeView only once (the first to load). The "Open" button then opens specifically that first cell's SwipeView, which is fine for the test scenario. The test verifies that after refresh, the SwipeView is closed — the exact cell tracked is sufficient.
No action needed, but this is worth noting for future test modifications.
✅ Looks Good
- Fix scope is correct:
#if IOS || MACCATALYSTis the right conditional. The existing file already uses#if IOSfor platform-specific logic, so this is consistent. RequestCloseis null-safe: UsesHandler?.Invoke(...)so it won't throw if called before the handler is attached.- No animation on close (
false): Appropriate for a background reset during cell reuse — no visual flash. - UI test covers the scenario: The test opens a SwipeView, refreshes the CollectionView, and verifies via screenshot — directly reproducing the reported bug.
- Test excluded from Windows (
#if TEST_FAILS_ON_WINDOWS): Correct, as the issue is iOS-specific. - Snapshot baselines added for iOS, Android, and Mac — the test infrastructure is complete.
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details On iOS, when a SwipeView is placed inside a CollectionView and its content is updated, the swipe items remain in the open state. ### Description of Change <!-- Enter description of the fix in this section --> When the BindingContext changes, manually close the open state of the SwipeView. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #19541 <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> **Tested the behavior in the following platforms.** - [x] Android - [x] Windows - [x] iOS - [x] Mac | Before | After | |---------|--------| | **iOS**<br> <video src="https://github.com/user-attachments/assets/75a1ec0f-faec-4f7e-9093-72298f1d63c4" width="300" height="600"> | **iOS**<br> <video src="https://github.com/user-attachments/assets/847b5c7e-9339-4749-aae7-a8e0fb73baed" width="300" height="600"> |
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details On iOS, when a SwipeView is placed inside a CollectionView and its content is updated, the swipe items remain in the open state. ### Description of Change <!-- Enter description of the fix in this section --> When the BindingContext changes, manually close the open state of the SwipeView. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #19541 <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> **Tested the behavior in the following platforms.** - [x] Android - [x] Windows - [x] iOS - [x] Mac | Before | After | |---------|--------| | **iOS**<br> <video src="https://github.com/user-attachments/assets/75a1ec0f-faec-4f7e-9093-72298f1d63c4" width="300" height="600"> | **iOS**<br> <video src="https://github.com/user-attachments/assets/847b5c7e-9339-4749-aae7-a8e0fb73baed" width="300" height="600"> |
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details On iOS, when a SwipeView is placed inside a CollectionView and its content is updated, the swipe items remain in the open state. ### Description of Change <!-- Enter description of the fix in this section --> When the BindingContext changes, manually close the open state of the SwipeView. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #19541 <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> **Tested the behavior in the following platforms.** - [x] Android - [x] Windows - [x] iOS - [x] Mac | Before | After | |---------|--------| | **iOS**<br> <video src="https://github.com/user-attachments/assets/75a1ec0f-faec-4f7e-9093-72298f1d63c4" width="300" height="600"> | **iOS**<br> <video src="https://github.com/user-attachments/assets/847b5c7e-9339-4749-aae7-a8e0fb73baed" width="300" height="600"> |
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details On iOS, when a SwipeView is placed inside a CollectionView and its content is updated, the swipe items remain in the open state. ### Description of Change <!-- Enter description of the fix in this section --> When the BindingContext changes, manually close the open state of the SwipeView. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #19541 <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> **Tested the behavior in the following platforms.** - [x] Android - [x] Windows - [x] iOS - [x] Mac | Before | After | |---------|--------| | **iOS**<br> <video src="https://github.com/user-attachments/assets/75a1ec0f-faec-4f7e-9093-72298f1d63c4" width="300" height="600"> | **iOS**<br> <video src="https://github.com/user-attachments/assets/847b5c7e-9339-4749-aae7-a8e0fb73baed" width="300" height="600"> |
…31248) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details On iOS, when a SwipeView is placed inside a CollectionView and its content is updated, the swipe items remain in the open state. ### Description of Change <!-- Enter description of the fix in this section --> When the BindingContext changes, manually close the open state of the SwipeView. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes dotnet#19541 <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> **Tested the behavior in the following platforms.** - [x] Android - [x] Windows - [x] iOS - [x] Mac | Before | After | |---------|--------| | **iOS**<br> <video src="https://github.com/user-attachments/assets/75a1ec0f-faec-4f7e-9093-72298f1d63c4" width="300" height="600"> | **iOS**<br> <video src="https://github.com/user-attachments/assets/847b5c7e-9339-4749-aae7-a8e0fb73baed" width="300" height="600"> |
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details On iOS, when a SwipeView is placed inside a CollectionView and its content is updated, the swipe items remain in the open state. ### Description of Change <!-- Enter description of the fix in this section --> When the BindingContext changes, manually close the open state of the SwipeView. ### Issues Fixed <!-- Please make sure that there is a bug logged for the issue being fixed. The bug should describe the problem and how to reproduce it. --> Fixes #19541 <!-- Are you targeting main? All PRs should target the main branch unless otherwise noted. --> **Tested the behavior in the following platforms.** - [x] Android - [x] Windows - [x] iOS - [x] Mac | Before | After | |---------|--------| | **iOS**<br> <video src="https://github.com/user-attachments/assets/75a1ec0f-faec-4f7e-9093-72298f1d63c4" width="300" height="600"> | **iOS**<br> <video src="https://github.com/user-attachments/assets/847b5c7e-9339-4749-aae7-a8e0fb73baed" width="300" height="600"> |
## What's Coming .NET MAUI inflight/candidate introduces significant improvements across all platforms with focus on quality, performance, and developer experience. This release includes 46 commits with various improvements, bug fixes, and enhancements. ## Button - [Android] Implemented material3 support for Button by @Dhivya-SF4094 in #33173 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for Button](#33172) </details> ## CollectionView - [Android] Fix RemainingItemsThresholdReachedCommand not firing when CollectionView has Header and Footer both defined by @SuthiYuvaraj in #29618 <details> <summary>🔧 Fixes</summary> - [Android : RemainingItemsThresholdReachedCommand not firing when CollectionVew has Header and Footer both defined](#29588) </details> - [iOS/MacCatalyst] Fix CollectionView ScrollTo for horizontal layouts by @Shalini-Ashokan in #33853 <details> <summary>🔧 Fixes</summary> - [[iOS/MacCatalyst] CollectionView ScrollTo does not work with horizontal Layout](#33852) </details> - [iOS & Mac] Fixed IndicatorView Size doesnt update dynamically by @SubhikshaSf4851 in #31129 <details> <summary>🔧 Fixes</summary> - [[iOS, Catalyst] IndicatorView.IndicatorSize does not update dynamically at runtime](#31064) </details> - [Android] Fix for CollectionView Scrolled event is triggered on the initial app load. by @BagavathiPerumal in #33558 <details> <summary>🔧 Fixes</summary> - [[Android] CollectionView Scrolled event is triggered on the initial app load.](#33333) </details> - [iOS, Android] Fix for CollectionView IsEnabled=false allows touch interactions by @praveenkumarkarunanithi in #31403 <details> <summary>🔧 Fixes</summary> - [More issues with CollectionView IsEnabled, InputTransparent, Opacity via Styles and code behind](#19771) </details> - [iOS] Fix VerticalOffset Update When Modifying CollectionView.ItemsSource While Scrolled by @devanathan-vaithiyanathan in #34153 <details> <summary>🔧 Fixes</summary> - [[iOS]VerticalOffset Not Reset to Zero After Clearing ItemSource in CollectionView](#26798) </details> ## DateTimePicker - [Android] Fix DatePicker MinimumDate/MaximumDate not updating dynamically by @HarishwaranVijayakumar in #33687 <details> <summary>🔧 Fixes</summary> - [[regression/8.0.3] [Android] DatePicker control minimum date issue](#19256) - [[Android] DatePicker does not update MinimumDate / MaximumDate in the Popup when set in the viewmodel after first opening](#33583) </details> ## Drawing - Android drawable perf by @albyrock87 in #31567 ## Editor - [Android] Implemented material3 support for Editor by @SyedAbdulAzeemSF4852 in #33478 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for Editor](#33476) </details> ## Entry - [iOS, Mac] Fix for CursorPosition not updating when typing into Entry control by @SyedAbdulAzeemSF4852 in #30505 <details> <summary>🔧 Fixes</summary> - [Entry control CursorPosition does not update on TextChanged event [iOS Maui 8.0.7] ](#20911) - [CursorPosition not calculated correctly on behaviors events for iOS devices](#32483) </details> ## Flyoutpage - [Android, Windows] Fix for FlyoutPage toolbar button not updating on orientation change by @praveenkumarkarunanithi in #31962 <details> <summary>🔧 Fixes</summary> - [Flyout page in Android does not show flyout button (burger) consistently](#24468) </details> - Fix for First Item in CollectionView Overlaps in FlyoutPage.Flyout on iOS by @praveenkumarkarunanithi in #29265 <details> <summary>🔧 Fixes</summary> - [[iOS] CollectionView not rendering first item correctly in FlyoutPage.Flyout](#29170) </details> ## Image - [Android] Fix excessive memory usage for stream and resource-based image loading by @Shalini-Ashokan in #33590 <details> <summary>🔧 Fixes</summary> - [[Android] Unexpected high Bitmap.ByteCount when loading image via ImageSource.FromResource() or ImageSource.FromStream() in .NET MAUI](#33239) </details> - [Android] Fix for Resize method returns an image that has already been disposed by @SyedAbdulAzeemSF4852 in #29964 <details> <summary>🔧 Fixes</summary> - [In GraphicsView, the Resize method returns an image that has already been disposed](#29961) - [IIMage.Resize bugged behaviour](#31103) </details> ## Label - Fixed Label Span font property inheritance when applied via Style by @SubhikshaSf4851 in #34110 <details> <summary>🔧 Fixes</summary> - [`Span` does not inherit text styling from `Label` if that styling is applied using `Style` ](#21326) </details> - [Android] Implemented material3 support for Label by @SyedAbdulAzeemSF4852 in #33599 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for Label](#33598) </details> ## Map - [Android] Fix Circle Stroke color is incorrectly updated as Fill color. by @NirmalKumarYuvaraj in #33643 <details> <summary>🔧 Fixes</summary> - [[Android] Circle Stroke color is incorrectly updated as Fill color.](#33642) </details> ## Mediapicker - [iOS] Fix: invoke MediaPicker completion handler after DismissViewController by @yuriikyry4enko in #34250 <details> <summary>🔧 Fixes</summary> - [[iOS] Media Picker UIImagePickerController closing issue](#21996) </details> ## Navigation - Fix ContentPage memory leak on Android when using NavigationPage modally (fixes #33918) by @brunck in #34117 <details> <summary>🔧 Fixes</summary> - [[Android] Modal TabbedPage whose tabs are NavigationPage(ContentPage) is retained after PopModalAsync()](#33918) </details> ## Picker - [Android] Implement material3 support for TimePicker by @HarishwaranVijayakumar in #33646 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for TimePicker](#33645) </details> - [Android] Implemented Material3 support for Picker by @SyedAbdulAzeemSF4852 in #33668 <details> <summary>🔧 Fixes</summary> - [Implement Material3 support for Picker](#33665) </details> ## RadioButton - [Android] Implemented material3 support for RadioButton by @SyedAbdulAzeemSF4852 in #33468 <details> <summary>🔧 Fixes</summary> - [Implement Material3 Support for RadioButton](#33467) </details> ## Setup - Clarify MA003 error message by @jeremy-visionaid in #34067 <details> <summary>🔧 Fixes</summary> - [MA003 false positive with 9.0.21](#26599) </details> ## Shell - [Android] Fix TabBar FlowDirection not updating dynamically by @SubhikshaSf4851 in #33091 <details> <summary>🔧 Fixes</summary> - [[Android, iOS] FlowDirection RTL is not updated dynamically on Shell TabBar](#32993) </details> - [Android] Fix page not disposed on Shell replace navigation by @Vignesh-SF3580 in #33426 <details> <summary>🔧 Fixes</summary> - [[Android] [Shell] replace navigation leaks current page](#25134) </details> - [Android] Fixed Shell flyout does not disable scrolling when FlyoutVerticalScrollMode is set to Disabled by @NanthiniMahalingam in #32734 <details> <summary>🔧 Fixes</summary> - [[Android] Shell.FlyoutVerticalScrollMode="Disabled" does not disable scrolling](#32477) </details> ## Single Project - Fix: Throw a clear error when an SVG lacks dimensions instead of a NullReferenceException by @Shalini-Ashokan in #33194 <details> <summary>🔧 Fixes</summary> - [MAUI Fails To Convert Valid SVG Files Into PNG Files (Object reference not set to an instance of an object)](#32460) </details> ## SwipeView - [iOS] Fix SwipeView stays open on iOS after updating content by @devanathan-vaithiyanathan in #31248 <details> <summary>🔧 Fixes</summary> - [[iOS] - Swipeview with collectionview issue](#19541) </details> ## TabbedPage - [Windows] Fixed IsEnabled Property not works on Tabs by @NirmalKumarYuvaraj in #26728 <details> <summary>🔧 Fixes</summary> - [ShellContent IsEnabledProperty does not work](#5161) - [[Windows] Shell Tab IsEnabled Not Working](#32996) </details> - [Android] Fix NavigationBar overlapping StatusBar when NavigationBar visibility changes by @Vignesh-SF3580 in #33359 <details> <summary>🔧 Fixes</summary> - [[Android] NavigationBar overlaps with StatusBar when mixing HasNavigationBar=true/false in TabbedPage on Android 15 (API 35)](#33340) </details> ## Templates - Fix for unable to open task using keyboard navigation on windows platform by @SuthiYuvaraj in #33647 <details> <summary>🔧 Fixes</summary> - [Unable to open task using keyboard: A11y_.NET maui_User can get all the insights of Dashboard_Keyboard](#30787) </details> ## TitleView - Fix for NavigationPage.TitleView does not expand with host window in iPadOS 26+ by @SuthiYuvaraj in #33088 ## Toolbar - [iOS] Fix toolbar items ignoring BarTextColor on iOS/MacCatalyst 26+ by @Shalini-Ashokan in #34036 <details> <summary>🔧 Fixes</summary> - [[iOS 26] ToolbarItem color with custom BarTextColor not working](#33970) </details> - [Android] Fix for ToolbarItem retaining the icon from the previous page on Android when using NavigationPage. by @BagavathiPerumal in #32311 <details> <summary>🔧 Fixes</summary> - [Toolbaritem keeps the icon of the previous page on Android, using NavigationPage (not shell)](#31727) </details> ## WebView - [Android] Fix WebView in a grid expands beyond it's cell by @devanathan-vaithiyanathan in #32145 <details> <summary>🔧 Fixes</summary> - [Android - WebView in a grid expands beyond it's cell](#32030) </details> ## Xaml - ContentPresenter: Propagate binding context to children with explicit TemplateBinding by @HarishwaranVijayakumar in #30880 <details> <summary>🔧 Fixes</summary> - [Binding context in ContentPresenter](#23797) </details> <details> <summary>🔧 Infrastructure (1)</summary> - [Revert] ContentPresenter: Propagate binding context to children with explicit TemplateBinding by @Ahamed-Ali in #34332 </details> <details> <summary>🧪 Testing (6)</summary> - [Testing] Feature Matrix UITest Cases for Shell Flyout Page by @NafeelaNazhir in #32525 - [Testing] Feature Matrix UITest Cases for Brushes by @LogishaSelvarajSF4525 in #31833 - [Testing] Feature Matrix UITest Cases for BindableLayout by @LogishaSelvarajSF4525 in #33108 - [Android] Add UI tests for Material 3 CheckBox by @HarishwaranVijayakumar in #34126 <details> <summary>🔧 Fixes</summary> - [[Android] Add UI tests for Material 3 CheckBox](#34125) </details> - [Testing] Feature Matrix UITest Cases for Shell Tabbed Page by @NafeelaNazhir in #33159 - [Testing] Fixed Test case failure in PR 34294 - [03/2/2026] Candidate - 1 by @TamilarasanSF4853 in #34334 </details> <details> <summary>📦 Other (2)</summary> - Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.9 by @PaulAndersonS in #34178 - Fix crash when closing Windows based app when using TitleBar by @MFinkBK in #34032 <details> <summary>🔧 Fixes</summary> - [Unhandled exception "Value does not fall within the expected range" when closing Windows app](#32194) </details> </details> **Full Changelog**: main...inflight/candidate
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Issue Details
On iOS, when a SwipeView is placed inside a CollectionView and its content is updated, the swipe items remain in the open state.
Description of Change
When the BindingContext changes, manually close the open state of the SwipeView.
Issues Fixed
Fixes #19541
Tested the behavior in the following platforms.
Before.mov
After.mov