Skip to content

[iOS] Fix CarouselView proper bounce-back behavior when Loop=false #29318

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 8, 2025

Conversation

Shalini-Ashokan
Copy link
Contributor

@Shalini-Ashokan Shalini-Ashokan commented May 5, 2025

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

In carousel view, when Loop is set to false, scrolling past the last item incorrectly allows scrolling beyond the edge without proper bounce-back behavior.

Root Cause

The carousel view was incorrectly calculating its total item count by adding extra positions even when Loop was set to false.

Description of Change

When Loop is false, the carousel returns the exact Item Count without additional items, preventing over-scrolling.

Reference

I resolved the issue by referring to the following code.

public int LoopCount => Loop && Count > 0 ? Count + 2 : Count;

Validated the behavior in the following platforms

  • Android
  • Windows
  • iOS
  • Mac

Issues Fixed

Fixes #29261
Fixes #27668

Output ScreenShot

Before After
Issue29261BeforeFix.mov
Issue29261After.mov

@dotnet-policy-service dotnet-policy-service bot added the community ✨ Community Contribution label May 5, 2025
Copy link
Contributor

Hey there @@Shalini-Ashokan! 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 May 5, 2025
@sheiksyedm sheiksyedm added platform/ios area-controls-collectionview CollectionView, CarouselView, IndicatorView labels May 5, 2025
@Shalini-Ashokan Shalini-Ashokan marked this pull request as ready for review May 5, 2025 14:58
@Copilot Copilot AI review requested due to automatic review settings May 5, 2025 14:58
@Shalini-Ashokan Shalini-Ashokan requested a review from a team as a code owner May 5, 2025 14:58
Copy link
Contributor

@Copilot 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 the CarouselView bounce-back behavior on iOS when Loop is false by correcting the item count calculation. The changes ensure that extra positions are not added and include additional tests to validate the behavior across multiple platforms.

  • Updated LoopObservableItemsSource2.cs to only add extra items when Loop is true.
  • Added a corresponding UITest in TestCases.Shared.Tests.
  • Added a HostApp UI test to support manual verification.

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29261.cs Added a UITest case that verifies the bounce-back behavior.
src/Controls/tests/TestCases.HostApp/Issues/Issue29261.cs Provided a HostApp page for manual UI testing of the behavior.
src/Controls/src/Core/Handlers/Items2/iOS/LoopObservableItemsSource2.cs Fixed the item count calculation to only add extra positions when Loop is true.

@jsuarezruiz
Copy link
Contributor

/azp run MAUI-UITests-public

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

jsuarezruiz
jsuarezruiz previously approved these changes May 8, 2025
@PureWeen PureWeen changed the base branch from main to inflight/current May 8, 2025 16:20
@PureWeen PureWeen dismissed jsuarezruiz’s stale review May 8, 2025 16:20

The base branch was changed.

@PureWeen PureWeen merged commit 905fb15 into dotnet:inflight/current May 8, 2025
77 checks passed
PureWeen pushed a commit that referenced this pull request May 9, 2025
…29318)

* Fixed the bounce back issue on carousal view 2

* Added test case

* Removed unwanted lines
PureWeen pushed a commit that referenced this pull request May 13, 2025
…29318)

* Fixed the bounce back issue on carousal view 2

* Added test case

* Removed unwanted lines
github-actions bot pushed a commit that referenced this pull request May 13, 2025
…29318)

* Fixed the bounce back issue on carousal view 2

* Added test case

* Removed unwanted lines
PureWeen pushed a commit that referenced this pull request May 14, 2025
…29318)

* Fixed the bounce back issue on carousal view 2

* Added test case

* Removed unwanted lines
PureWeen pushed a commit that referenced this pull request May 14, 2025
…29318)

* Fixed the bounce back issue on carousal view 2

* Added test case

* Removed unwanted lines
@PureWeen PureWeen added this to the .NET 9 SR8 milestone May 15, 2025
github-actions bot pushed a commit that referenced this pull request May 15, 2025
…29318)

* Fixed the bounce back issue on carousal view 2

* Added test case

* Removed unwanted lines
PureWeen added a commit that referenced this pull request May 21, 2025
For more information about inflight process check
https://github.com/dotnet/maui/wiki/Inflight-Branch-Process

# .NET MAUI Release Notes

## New Release: May 21, 2025

We're excited to announce a new release of .NET MAUI with several bug
fixes and improvements across various platforms.

### Bug Fixes

#### iOS
- **Map Control**: Fixed crash when navigating to a page containing a
map more than once (#29369)
- **CarouselView**: Fixed bounce-back behavior when Loop=false, ensuring
proper scrolling experience (#29318)
- **UIView**: Fixed NullReferenceException for UIView not being in
UIWindow (#29460)

#### Windows
- **CarouselView**: Fixed HorizontalScrollBarVisibility="Never" not
working properly (#29343)
- **UI Controls**: Fixed the color not being applied to the
Expand/Collapse Chevron icon (#29140)

#### Windows & macOS
- **Modal Navigation**: Fixed issue where Disappearing event was not
triggered when closing a window with a modal page (#29129)

#### Android
- **Modal Pages**: Improved inheritance of StatusBar and NavigationBar
background colors (#28568)
- **Footer Scrolling**: Fixed footer scrolling issues in list controls
(#29381)
- **Modal Pages**: Improved inheritance of StatusBar and NavigationBar
background colors on modal pages (#28568)

#### Cross-Platform
- **CarouselView**: Fixed ItemsLayout runtime updates to ensure proper
layout behavior (#29447)
- **CollectionView**: Fixed various issues in CollectionView
implementation (#29423)

### Testing Improvements
- Added feature matrix UITest cases for CollectionView dynamic changes
(#29424)

### Code Quality
- Fixed code formatting issues across the codebase
- Minor typo corrections (#29379)

### Contributors

This release was made possible by the hard work of our dedicated team
and community contributors. We'd like to extend our gratitude to
everyone who has contributed to this release.

### Installation

This update is available through NuGet and the .NET SDK. Update your
projects to get access to these fixes.

### Known Issues

Please refer to our issue tracker for any known issues and their
workarounds.

---

For more information about .NET MAUI, visit [the official
documentation](https://docs.microsoft.com/dotnet/maui/).
PureWeen pushed a commit that referenced this pull request May 21, 2025
…29318)

* Fixed the bounce back issue on carousal view 2

* Added test case

* Removed unwanted lines
@jsuarezruiz jsuarezruiz moved this from Todo to Done in MAUI SDK Ongoing Jun 2, 2025
@github-actions github-actions bot locked and limited conversation to collaborators Jun 22, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-controls-collectionview CollectionView, CarouselView, IndicatorView community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/ios
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

CarouselViewHandler2 for iOS doesn't properly bounce back when reaching the end with Loop=false
4 participants