Skip to content

Comments

[iOS] Fixed the UIStepper Value from being clamped based on old higher MinimumValue - Candidate PR test failure fix- 33363#33392

Merged
PureWeen merged 2 commits intodotnet:inflight/candidatefrom
Ahamed-Ali:StepperFailure32939
Jan 6, 2026
Merged

[iOS] Fixed the UIStepper Value from being clamped based on old higher MinimumValue - Candidate PR test failure fix- 33363#33392
PureWeen merged 2 commits intodotnet:inflight/candidatefrom
Ahamed-Ali:StepperFailure32939

Conversation

@Ahamed-Ali
Copy link
Contributor

@Ahamed-Ali Ahamed-Ali commented Jan 6, 2026

Root Cause of the issue

  • Stepper_SetIncrementAndVerifyValueChange and Stepper_SetIncrementValue_VerifyIncrement in the candidate failed because the previous test, Stepper_ResetToInitialState_VerifyDefaultValues, updated the Minimum value to 10.

  • When the next test (Stepper_SetIncrementAndVerifyValueChange) runs, a new ViewModel is created and the default values (Value = 0, Minimum = 0) are set in StepperFeature. However, MapValue is called first during the time, the Minimum value still retains the value 10 from the previous test. Although MAUI correctly updates PlatformStepper.Value, the native UIStepper automatically clamps the value based on the old Minimum value, causing the test to fail.

Description of Change

  • Before updating platformStepper.Value, the code first checks if MinimumValue needs updating and applies it. This ensures iOS always clamps against the current/correct MinimumValue, not a stale one.

Example Scenario

Old state: Min=5, Value=5
New state: Min=0, Value=2
Without fix: If Value is set first (to 2), iOS sees Min=5 (stale) and clamps Value back to 5
With fix: Min is updated to 0 first, then Value is set to 2 successfully

Regressed PR

#32939

Issues Fixed

Fixes #

Tested the behaviour in the following platforms

  • Android
  • Windows
  • iOS
  • Mac

Screenshot

Before Issue Fix After Issue Fix
BeforeFixStepper.mov
AfterFixStepper.mov

@dotnet-policy-service dotnet-policy-service bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Jan 6, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review January 6, 2026 13:57
@sheiksyedm sheiksyedm changed the title [iOS] Fixed the UIStepper Value from being clamped based on old higher MinimumValue [iOS] Fixed the UIStepper Value from being clamped based on old higher MinimumValue - Candidate PR test failure 33363 Jan 6, 2026
@sheiksyedm sheiksyedm changed the title [iOS] Fixed the UIStepper Value from being clamped based on old higher MinimumValue - Candidate PR test failure 33363 [iOS] Fixed the UIStepper Value from being clamped based on old higher MinimumValue - Candidate PR test failure fix- 33363 Jan 6, 2026
@Tamilarasan-Paranthaman Tamilarasan-Paranthaman added the community ✨ Community Contribution label Jan 6, 2026
PureWeen added a commit to Ahamed-Ali/maui that referenced this pull request Jan 6, 2026
@PureWeen PureWeen force-pushed the StepperFailure32939 branch from 197ae7a to 14e420d Compare January 6, 2026 22:23
@PureWeen PureWeen merged commit 1b2c2d9 into dotnet:inflight/candidate Jan 6, 2026
1 of 12 checks passed
Copilot AI added a commit that referenced this pull request Jan 7, 2026
…alue

Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com>
@PureWeen PureWeen mentioned this pull request Jan 7, 2026
PureWeen added a commit that referenced this pull request Jan 9, 2026
…r MinimumValue - Candidate PR test failure fix- 33363 (#33392)

### Root Cause of the issue



- `Stepper_SetIncrementAndVerifyValueChange` and
`Stepper_SetIncrementValue_VerifyIncrement` in the candidate failed
because the previous test,
Stepper_ResetToInitialState_VerifyDefaultValues, updated the Minimum
value to 10.

- When the next test (Stepper_SetIncrementAndVerifyValueChange) runs, a
new ViewModel is created and the default values (Value = 0, Minimum = 0)
are set in StepperFeature. However, MapValue is called first during the
time, the Minimum value still retains the value 10 from the previous
test. Although MAUI correctly updates PlatformStepper.Value, the native
UIStepper automatically clamps the value based on the old Minimum value,
causing the test to fail.

### Description of Change



- Before updating `platformStepper.Value`, the code first checks if
MinimumValue needs updating and applies it. This ensures iOS always
clamps against the current/correct MinimumValue, not a stale one.

#### Example Scenario

Old state: Min=5, Value=5
New state: Min=0, Value=2
Without fix: If Value is set first (to 2), iOS sees Min=5 (stale) and
clamps Value back to 5
With fix: Min is updated to 0 first, then Value is set to 2 successfully


### Regressed PR 

#32939

### Issues Fixed



Fixes #



### Tested the behaviour in the following platforms



- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac



### Screenshot



| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/0ddeba45-0110-4362-96b3-ed8404fe83a1">
| <video
src="https://github.com/user-attachments/assets/8cc43af4-b7c5-4f1d-a943-a9f476286069">
|

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
PureWeen added a commit that referenced this pull request Jan 9, 2026
…r MinimumValue - Candidate PR test failure fix- 33363 (#33392)

### Root Cause of the issue



- `Stepper_SetIncrementAndVerifyValueChange` and
`Stepper_SetIncrementValue_VerifyIncrement` in the candidate failed
because the previous test,
Stepper_ResetToInitialState_VerifyDefaultValues, updated the Minimum
value to 10.

- When the next test (Stepper_SetIncrementAndVerifyValueChange) runs, a
new ViewModel is created and the default values (Value = 0, Minimum = 0)
are set in StepperFeature. However, MapValue is called first during the
time, the Minimum value still retains the value 10 from the previous
test. Although MAUI correctly updates PlatformStepper.Value, the native
UIStepper automatically clamps the value based on the old Minimum value,
causing the test to fail.

### Description of Change



- Before updating `platformStepper.Value`, the code first checks if
MinimumValue needs updating and applies it. This ensures iOS always
clamps against the current/correct MinimumValue, not a stale one.

#### Example Scenario

Old state: Min=5, Value=5
New state: Min=0, Value=2
Without fix: If Value is set first (to 2), iOS sees Min=5 (stale) and
clamps Value back to 5
With fix: Min is updated to 0 first, then Value is set to 2 successfully


### Regressed PR 

#32939

### Issues Fixed



Fixes #



### Tested the behaviour in the following platforms



- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac



### Screenshot



| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/0ddeba45-0110-4362-96b3-ed8404fe83a1">
| <video
src="https://github.com/user-attachments/assets/8cc43af4-b7c5-4f1d-a943-a9f476286069">
|

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
PureWeen added a commit that referenced this pull request Jan 13, 2026
…r MinimumValue - Candidate PR test failure fix- 33363 (#33392)

### Root Cause of the issue



- `Stepper_SetIncrementAndVerifyValueChange` and
`Stepper_SetIncrementValue_VerifyIncrement` in the candidate failed
because the previous test,
Stepper_ResetToInitialState_VerifyDefaultValues, updated the Minimum
value to 10.

- When the next test (Stepper_SetIncrementAndVerifyValueChange) runs, a
new ViewModel is created and the default values (Value = 0, Minimum = 0)
are set in StepperFeature. However, MapValue is called first during the
time, the Minimum value still retains the value 10 from the previous
test. Although MAUI correctly updates PlatformStepper.Value, the native
UIStepper automatically clamps the value based on the old Minimum value,
causing the test to fail.

### Description of Change



- Before updating `platformStepper.Value`, the code first checks if
MinimumValue needs updating and applies it. This ensures iOS always
clamps against the current/correct MinimumValue, not a stale one.

#### Example Scenario

Old state: Min=5, Value=5
New state: Min=0, Value=2
Without fix: If Value is set first (to 2), iOS sees Min=5 (stale) and
clamps Value back to 5
With fix: Min is updated to 0 first, then Value is set to 2 successfully


### Regressed PR 

#32939

### Issues Fixed



Fixes #



### Tested the behaviour in the following platforms



- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac



### Screenshot



| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/0ddeba45-0110-4362-96b3-ed8404fe83a1">
| <video
src="https://github.com/user-attachments/assets/8cc43af4-b7c5-4f1d-a943-a9f476286069">
|

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
PureWeen added a commit that referenced this pull request Jan 13, 2026
…r MinimumValue - Candidate PR test failure fix- 33363 (#33392)

### Root Cause of the issue



- `Stepper_SetIncrementAndVerifyValueChange` and
`Stepper_SetIncrementValue_VerifyIncrement` in the candidate failed
because the previous test,
Stepper_ResetToInitialState_VerifyDefaultValues, updated the Minimum
value to 10.

- When the next test (Stepper_SetIncrementAndVerifyValueChange) runs, a
new ViewModel is created and the default values (Value = 0, Minimum = 0)
are set in StepperFeature. However, MapValue is called first during the
time, the Minimum value still retains the value 10 from the previous
test. Although MAUI correctly updates PlatformStepper.Value, the native
UIStepper automatically clamps the value based on the old Minimum value,
causing the test to fail.

### Description of Change



- Before updating `platformStepper.Value`, the code first checks if
MinimumValue needs updating and applies it. This ensures iOS always
clamps against the current/correct MinimumValue, not a stale one.

#### Example Scenario

Old state: Min=5, Value=5
New state: Min=0, Value=2
Without fix: If Value is set first (to 2), iOS sees Min=5 (stale) and
clamps Value back to 5
With fix: Min is updated to 0 first, then Value is set to 2 successfully


### Regressed PR 

#32939

### Issues Fixed



Fixes #



### Tested the behaviour in the following platforms



- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac



### Screenshot



| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/0ddeba45-0110-4362-96b3-ed8404fe83a1">
| <video
src="https://github.com/user-attachments/assets/8cc43af4-b7c5-4f1d-a943-a9f476286069">
|

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
PureWeen added a commit that referenced this pull request Jan 13, 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 27 commits with various improvements,
bug fixes, and enhancements.

## CollectionView
- [iOS][CV2] Fix page can be dragged down, and it would cause an extra
space between Header and EmptyView text by @devanathan-vaithiyanathan in
#31840
  <details>
  <summary>🔧 Fixes</summary>

- [I8_Header_and_Footer_Null - The page can be dragged down, and it
would cause an extra space between Header and EmptyView
text.](#31465)
  </details>

- [iOS] Fixed the Items not displayed properly in CarouselView2 by
@Ahamed-Ali in #31336
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Items are not updated properly in
CarouselView2.](#31148)
  </details>

## Docs
- Improve Controls Core API docs by @jfversluis in
#33240

## Editor
- [iOS] Fixed an issue where an Editor with a small height inside a
ScrollView would cause the entire page to scroll by
@Tamilarasan-Paranthaman in #27948
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS][Editor] An Editor that has not enough height and resides inside
a ScrollView/CollectionView will scroll the entire
page](#27750)
  </details>

## Image
- [Android] Image control crashes on Android when image width exceeds
height by @KarthikRajaKalaimani in
#33045
  <details>
  <summary>🔧 Fixes</summary>

- [Image control crashes on Android when image width exceeds
height](#32869)
  </details>

## Mediapicker
- [Android 🤖] Add a log telling why the request is cancelled by @pictos
in #33295
  <details>
  <summary>🔧 Fixes</summary>

- [MediaPicker.PickPhotosAsync throwing TaskCancelledException in
net10-android](#33283)
  </details>

## Navigation
- [Android] Fix for App Hang When PopModalAsync Is Called Immediately
After PushModalAsync with Task.Yield() by @BagavathiPerumal in
#32479
  <details>
  <summary>🔧 Fixes</summary>

- [App hangs if PopModalAsync is called after PushModalAsync with single
await Task.Yield()](#32310)
  </details>

- [iOS 26] Navigation hangs after rapidly open and closing new page
using Navigation.PushAsync - fix by @kubaflo in
#32456
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] Navigation hangs after rapidly open and closing new page
using Navigation.PushAsync](#32425)
  </details>

## Pages
- [iOS] Fix ContentPage BackgroundImageSource not working by
@Shalini-Ashokan in #33297
  <details>
  <summary>🔧 Fixes</summary>

- [.Net MAUI- Page.BackgroundImageSource not working for
iOS](#21594)
  </details>

## RadioButton
- [Issue-Resolver] Fix #33264 - RadioButtonGroup not working with
Collection View by @kubaflo in #33343
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButtonGroup not working with
CollectionView](#33264)
  </details>

## SafeArea
- [Android] Fixed Label Overlapped by Android Status Bar When Using
SafeAreaEdges="Container" in .NET MAUI by @NirmalKumarYuvaraj in
#33285
  <details>
  <summary>🔧 Fixes</summary>

- [SafeAreaEdges works correctly only on the first tab in Shell. Other
tabs have content colliding with the display cutout in the landscape
mode.](#33034)
- [Label Overlapped by Android Status Bar When Using
SafeAreaEdges="Container" in .NET
MAUI](#32941)
- [[MAUI 10] Layout breaks on first navigation (Shell // route) until
soft keyboard appears/disappears (Android +
iOS)](#33038)
  </details>

## ScrollView
- [Windows, Android] Fix ScrollView Content Not Removed When Set to Null
by @devanathan-vaithiyanathan in
#33069
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows, Android] ScrollView Content Not Removed When Set to
Null](#33067)
  </details>

## Searchbar
- Fix Android crash when changing shared Drawable tint on Searchbar by
@tritter in #33071
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Crash on changing Tint of
Searchbar](#33070)
  </details>

## Shell
- [iOS] - Fix Custom FlyoutIcon from Being Overridden to Default Color
in Shell by @prakashKannanSf3972 in
#27580
  <details>
  <summary>🔧 Fixes</summary>

- [Change the flyout icon
color](#6738)
  </details>

- [iOS] Fix Shell NavBarIsVisible updates when switching ShellContent by
@Vignesh-SF3580 in #33195
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Shell NavBarIsVisible is not updated when changing
ShellContent](#33191)
  </details>

## Slider
- [C] Fix Slider and Stepper property order independence by
@StephaneDelcroix in #32939
  <details>
  <summary>🔧 Fixes</summary>

- [Slider Binding Initialization Order Causes Incorrect Value Assignment
in XAML](#32903)
- [Slider is very broken, Value is a mess when setting
Minimum](#14472)
- [Slider is buggy depending on order of
properties](#18910)
- [Stepper Value is incorrectly clamped to default min/max when using
bindableproperties in MVVM
pattern](#12243)
- [[Issue-Resolver] Fix #32903 - Sliderbinding initialization order
issue](#32907)
  </details>

## Stepper
- [Windows] Maui Stepper: Clamp minimum and maximum value by @OomJan in
#33275
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Maui Stepper is not clamped to minimum or maximum
internally](#33274)
  </details>

- [iOS] Fixed the UIStepper Value from being clamped based on old higher
MinimumValue - Candidate PR test failure fix- 33363 by @Ahamed-Ali in
#33392

## TabbedPage
- [windows] Fixed Rapid change of selected tab results in crash. by
@praveenkumarkarunanithi in #33113
  <details>
  <summary>🔧 Fixes</summary>

- [Rapid change of selected tab results in crash on
Windows.](#32824)
  </details>

## Titlebar
- [Mac] Fix TitleBar Content Overlapping with Traffic Light Buttons on
Latest macOS Version by @devanathan-vaithiyanathan in
#33157
  <details>
  <summary>🔧 Fixes</summary>

- [TitleBar Content Overlapping with Traffic Light Buttons on Latest
macOS Version](#33136)
  </details>

## Xaml
- Fix for Control does not update from binding anymore after
MultiBinding.ConvertBack is called by @BagavathiPerumal in
#33128
  <details>
  <summary>🔧 Fixes</summary>

- [Control does not update from binding anymore after
MultiBinding.ConvertBack is
called](#24969)
- [The issue with the MultiBinding converter with two way binding mode
does not work properly when changing the
values.](#20382)
  </details>


<details>
<summary>🔧 Infrastructure (1)</summary>

- Avoid KVO on CALayer by introducing an Apple PlatformInterop by
@albyrock87 in #30861

</details>

<details>
<summary>🧪 Testing (2)</summary>

- [Testing] Enable UITest Issue18193 on MacCatalyst by @NafeelaNazhir in
#31653
  <details>
  <summary>🔧 Fixes</summary>

- [Test Issue18193 was disabled on Mac
Catalyst](#27206)
  </details>
- Set the CV2 handlers as the default by @Ahamed-Ali in
#33177

</details>

<details>
<summary>📦 Other (3)</summary>

- Update WindowsAppSDK to 1.8 by @mattleibow in
#32174
  <details>
  <summary>🔧 Fixes</summary>

- [Update to WindowsAppSDK](#30858)
  </details>
- Fix command dependency reentrancy by @simonrozsival in
#33129
- Fix SafeArea AdjustPan handling and add AdjustNothing mode tests by
@PureWeen via @Copilot in #33354

</details>
**Full Changelog**:
main...inflight/candidate
kubaflo pushed a commit to kubaflo/maui that referenced this pull request Jan 16, 2026
…r MinimumValue - Candidate PR test failure fix- 33363 (dotnet#33392)

### Root Cause of the issue



- `Stepper_SetIncrementAndVerifyValueChange` and
`Stepper_SetIncrementValue_VerifyIncrement` in the candidate failed
because the previous test,
Stepper_ResetToInitialState_VerifyDefaultValues, updated the Minimum
value to 10.

- When the next test (Stepper_SetIncrementAndVerifyValueChange) runs, a
new ViewModel is created and the default values (Value = 0, Minimum = 0)
are set in StepperFeature. However, MapValue is called first during the
time, the Minimum value still retains the value 10 from the previous
test. Although MAUI correctly updates PlatformStepper.Value, the native
UIStepper automatically clamps the value based on the old Minimum value,
causing the test to fail.

### Description of Change



- Before updating `platformStepper.Value`, the code first checks if
MinimumValue needs updating and applies it. This ensures iOS always
clamps against the current/correct MinimumValue, not a stale one.

#### Example Scenario

Old state: Min=5, Value=5
New state: Min=0, Value=2
Without fix: If Value is set first (to 2), iOS sees Min=5 (stale) and
clamps Value back to 5
With fix: Min is updated to 0 first, then Value is set to 2 successfully


### Regressed PR 

dotnet#32939

### Issues Fixed



Fixes #



### Tested the behaviour in the following platforms



- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac



### Screenshot



| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video
src="https://github.com/user-attachments/assets/0ddeba45-0110-4362-96b3-ed8404fe83a1">
| <video
src="https://github.com/user-attachments/assets/8cc43af4-b7c5-4f1d-a943-a9f476286069">
|

---------

Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
@github-actions github-actions bot locked and limited conversation to collaborators Feb 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-stepper Stepper community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/ios

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants