Skip to content

[iOS] Fix SwipeView stays open on iOS after updating content#31248

Merged
kubaflo merged 23 commits intodotnet:inflight/currentfrom
devanathan-vaithiyanathan:fix-19541
Feb 23, 2026
Merged

[iOS] Fix SwipeView stays open on iOS after updating content#31248
kubaflo merged 23 commits intodotnet:inflight/currentfrom
devanathan-vaithiyanathan:fix-19541

Conversation

@devanathan-vaithiyanathan
Copy link
Copy Markdown
Contributor

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.

  • Android
  • Windows
  • iOS
  • Mac
Before After
iOS
Before.mov
iOS
After.mov

@dotnet-policy-service dotnet-policy-service bot added the community ✨ Community Contribution label Aug 20, 2025
@dotnet-policy-service
Copy link
Copy Markdown
Contributor

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.

@dotnet-policy-service dotnet-policy-service bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Aug 20, 2025
@devanathan-vaithiyanathan devanathan-vaithiyanathan marked this pull request as ready for review August 21, 2025 13:13
Copilot AI review requested due to automatic review settings August 21, 2025 13:13
@devanathan-vaithiyanathan devanathan-vaithiyanathan requested a review from a team as a code owner August 21, 2025 13:13
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link
Copy Markdown

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)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should use a compilation directive and only do this on iOS?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And Catalyst

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuarezruiz , Based on suggestion, I have modified the changes.

@jsuarezruiz
Copy link
Copy Markdown
Contributor

/azp run MAUI-UITests-public

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@jsuarezruiz
Copy link
Copy Markdown
Contributor

jsuarezruiz commented Oct 9, 2025

/rebase

@rmarinho
Copy link
Copy Markdown
Member

rmarinho commented Feb 18, 2026

🤖 AI Summary

📊 Expand Full Review
🔍 Pre-Flight — Context & Validation
📝 Review Sessioncondition added · fc467b1

Issue: #19541 - [iOS] SwipeView with CollectionView issue
PR: #31248 - [iOS] Fix SwipeView stays open on iOS after updating content
Platforms Affected: iOS (primary), MacCatalyst
Files Changed: 1 fix file, 3 snapshot files, 2 test files

Issue Summary

On iOS, when a SwipeView is open inside a CollectionView and the CollectionView's ItemsSource is refreshed, the SwipeView remains in the open state. This happens because iOS/MacCatalyst CollectionViews reuse cells (unlike Android/Windows which create new cells), so the old swipe open state persists after rebinding. On Android, this works correctly because new cells are created on rebind.

Fix Description

In SwipeView.OnBindingContextChanged(), close the SwipeView when _isOpen == true, but only on iOS/MacCatalyst (using #if IOS || MACCATALYST compiler directive). This prevents the stale open state when cells are recycled.

Files Changed

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 Sessioncondition 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 Sessioncondition 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 Sessioncondition 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 unnecessary RequestClose calls on already-closed SwipeViews
  • Uses correct API: ((ISwipeView)this).RequestClose(new SwipeViewCloseRequest(false)) - uses the established interface with animated: 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 uses AutomationId for test automation.
  • NUnit test: Opens SwipeView, triggers refresh, verifies via screenshot. Simple and direct.
  • Platform guard: #if TEST_FAILS_ON_WINDOWS correctly 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));
    }
#endif

This closes the stale swipe state before the view is reused with the new binding context.

Key Technical Details

  • _isOpen — internal field on SwipeView tracking open state
  • ISwipeView.RequestClose — dispatches to the platform handler via Handler?.Invoke(...), so it's safe to call even if no handler is attached
  • SwipeViewCloseRequest(false)false = no animation, appropriate for a reset during rebind
  • The #if IOS || MACCATALYST conditional is consistent with existing patterns in SwipeView.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 || MACCATALYST is the right conditional. The existing file already uses #if IOS for platform-specific logic, so this is consistent.
  • RequestClose is null-safe: Uses Handler?.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.

@rmarinho rmarinho added s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-fix-win AI found a better alternative fix than the PR s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Feb 18, 2026
@kubaflo kubaflo added s/agent-fix-lose Author adopted the agent's fix and it turned out to be bad s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates and removed s/agent-fix-win AI found a better alternative fix than the PR s/agent-fix-lose Author adopted the agent's fix and it turned out to be bad labels Feb 20, 2026
@kubaflo kubaflo changed the base branch from main to inflight/current February 23, 2026 23:50
@kubaflo kubaflo merged commit c2c72cf into dotnet:inflight/current Feb 23, 2026
71 of 79 checks passed
github-actions bot pushed a commit that referenced this pull request Feb 24, 2026
<!-- 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"> |
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
<!-- 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"> |
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
<!-- 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"> |
github-actions bot pushed a commit that referenced this pull request Mar 3, 2026
<!-- 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"> |
HarishKumarSF4517 pushed a commit to HarishKumarSF4517/maui that referenced this pull request Mar 5, 2026
…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"> |
github-actions bot pushed a commit that referenced this pull request Mar 6, 2026
<!-- 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"> |
PureWeen added a commit that referenced this pull request Mar 11, 2026
## 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
@github-actions github-actions bot locked and limited conversation to collaborators Mar 26, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-swipeview SwipeView community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/ios s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[iOS] - Swipeview with collectionview issue

7 participants