Skip to content

[iOS] Fix Editor losing scrollability after rotation when CharacterSpacing is applied - #35309

Merged
kubaflo merged 12 commits into
dotnet:inflight/currentfrom
Vignesh-SF3580:fix-35114
May 6, 2026
Merged

[iOS] Fix Editor losing scrollability after rotation when CharacterSpacing is applied#35309
kubaflo merged 12 commits into
dotnet:inflight/currentfrom
Vignesh-SF3580:fix-35114

Conversation

@Vignesh-SF3580

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 an Editor has CharacterSpacing applied through a Slider, the Editor becomes scrollable once the content exceeds its frame size. After rotating the device (portrait → landscape → portrait), the Editor loses scrollability because a re-measurement cascade expands it to the full content height.

Regression PR: #30629

Root Cause

PR #30629 added ValidateSafeArea() to MauiView.LayoutSubviews, which calls InvalidateConstraintsCache() during rotation. This clears the measurement cache (_lastMeasuredSize = null), causing HasBeenMeasured() = false and needsMeasure = true for Pages.
As a result, a full re-measurement cascade occurs, where the Editor is measured with infinite height. SizeThatFits then returns the full content height (for example, 134px), causing the Editor to grow to fit its content and lose its scrollable behavior.

Description of Change

Updated EditorHandler.GetDesiredSize to cap the measured height to the current frame height when the Editor content exceeds its frame (scrollable state).
An AllowAutoGrowth flag was added to MauiTextView so Editors using AutoSize = TextChanges are excluded from the cap and can continue growing to fit their content.

Issues Fixed

Fixes #35114

Screenshots

Before Issue Fix After Issue Fix
35114BeforeFix.mov
35114AfterFix.mov

@github-actions

github-actions Bot commented May 5, 2026

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35309

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35309"

@Vignesh-SF3580 Vignesh-SF3580 added community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration labels May 5, 2026

@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Expert Review — 6 findings

See inline comments for details.

Comment thread src/Controls/tests/TestCases.HostApp/Issues/Issue35114.cs Outdated
Comment thread src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs Outdated
Comment thread src/Core/src/Handlers/Editor/EditorHandler.iOS.cs Outdated
Comment thread src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
Comment thread src/Controls/src/Core/Editor/Editor.iOS.cs
@MauiBot MauiBot added s/agent-review-incomplete s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels May 5, 2026
Comment thread src/Controls/tests/TestCases.HostApp/Issues/Issue35114.cs Outdated
Comment thread src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs Outdated
Comment thread src/Core/src/Handlers/Editor/EditorHandler.iOS.cs Outdated
Comment thread src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
Comment thread src/Controls/src/Core/Editor/Editor.iOS.cs
@sheiksyedm
sheiksyedm marked this pull request as ready for review May 6, 2026 08:06
Copilot AI review requested due to automatic review settings May 6, 2026 08:06

Copilot AI left a comment

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.

Pull request overview

Fixes an iOS regression where Editor can lose scrollability after device rotation (when CharacterSpacing is applied) by preventing a re-measurement cascade from expanding the native UITextView to its full content height, while still allowing AutoSize=TextChanges editors to grow.

Changes:

  • Add an AllowAutoGrowth flag to MauiTextView and map it from Editor.AutoSize on iOS/MacCatalyst.
  • Update EditorHandler.GetDesiredSize (iOS) to cap measured height to the current frame height for “scrollable” editors after rotation-driven cache invalidation.
  • Add regression coverage via a new Issues UI test and an iOS device test validating AutoSize=TextChanges still grows after constraint changes.

Reviewed changes

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

Show a summary per file
File Description
src/Core/src/Platform/iOS/MauiTextView.cs Adds AllowAutoGrowth switch used to control whether measurement may exceed the current frame.
src/Core/src/Handlers/Editor/EditorHandler.iOS.cs Caps desired height to preserve scrollability after rotation; also enforces height constraints when SizeThatFits ignores them.
src/Controls/src/Core/Editor/Editor.Mapper.cs Adds iOS/MacCatalyst mapper hook for AutoSize to drive native behavior.
src/Controls/src/Core/Editor/Editor.iOS.cs Implements MapAutoSize to set MauiTextView.AllowAutoGrowth based on Editor.AutoSize.
src/Controls/tests/TestCases.HostApp/Issues/Issue35114.cs Adds a HostApp issue page to reproduce the scenario via slider-driven CharacterSpacing.
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs Adds a UI regression test validating the editor doesn’t grow after rotation.
src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs Adds an iOS device test ensuring AutoSize=TextChanges editors still grow after constraint changes.

Comment thread src/Controls/tests/TestCases.HostApp/Issues/Issue35114.cs Outdated
@dotnet dotnet deleted a comment from MauiBot May 6, 2026
@dotnet dotnet deleted a comment from MauiBot May 6, 2026
@dotnet dotnet deleted a comment from MauiBot May 6, 2026
@MauiBot MauiBot added s/agent-approved AI agent recommends approval - PR fix is correct and optimal and removed s/agent-review-incomplete labels May 6, 2026
@dotnet dotnet deleted a comment from MauiBot May 6, 2026
@MauiBot

MauiBot commented May 6, 2026

Copy link
Copy Markdown
Collaborator

🤖 AI Summary

👋 @Vignesh-SF3580 — new AI review results are available. Please review the latest session below.

📊 Review Session6ebe508 · Addressed copilot comments. · 2026-05-06 22:23 UTC
🚦 Gate — Test Before & After Fix

Gate Result: ❌ FAILED

Platform: IOS · Base: main · Merge base: 1463c4c5

Test Without Fix (expect FAIL) With Fix (expect PASS)
📱 EditorTests (AutoSizeTextChangesEditorGrowsAfterRotation) Category=Editor ❌ PASS — 440s ❌ FAIL — 195s
🖥️ Issue35114 Issue35114 ✅ FAIL — 136s ✅ PASS — 96s
🔴 Without fix — 📱 EditorTests (AutoSizeTextChangesEditorGrowsAfterRotation): PASS ❌ · 440s

(truncated to last 15,000 chars)

ific + 572
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x00000001927ecc78 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x00000001928603a4 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 100
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000104372f28 mlaunch`xamarin_dyn_objc_msgSend + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x00000001078ae68c
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x0000000107c11f68
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x00000001078a8294
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x00000001078410b4
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x000000010705cd54
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x0000000105f5cc04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #16: 0x0000000105ddad30 libcoreclr.dylib`MethodDescCallSite::CallTargetWorker(unsigned long long const*, unsigned long long*, int) + 836
�[40m�[37mdbug�[39m�[22m�[49m: frame #17: 0x0000000105ce1350 libcoreclr.dylib`RunMain(MethodDesc*, short, int*, PtrArray**) + 648
�[40m�[37mdbug�[39m�[22m�[49m: frame #18: 0x0000000105ce1688 libcoreclr.dylib`Assembly::ExecuteMainMethod(PtrArray**, int) + 264
�[40m�[37mdbug�[39m�[22m�[49m: frame #19: 0x0000000105d0929c libcoreclr.dylib`CorHost2::ExecuteAssembly(unsigned int, char16_t const*, int, char16_t const**, unsigned int*) + 640
�[40m�[37mdbug�[39m�[22m�[49m: frame #20: 0x0000000105ccf650 libcoreclr.dylib`coreclr_execute_assembly + 232
�[40m�[37mdbug�[39m�[22m�[49m: frame #21: 0x000000010436e140 mlaunch`mono_jit_exec + 204
�[40m�[37mdbug�[39m�[22m�[49m: frame #22: 0x0000000104371ecc mlaunch`xamarin_main + 884
�[40m�[37mdbug�[39m�[22m�[49m: frame #23: 0x00000001043731f4 mlaunch`main + 64
�[40m�[37mdbug�[39m�[22m�[49m: frame #24: 0x0000000190d92b98 dyld`start + 6076
�[40m�[37mdbug�[39m�[22m�[49m: thread #2
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f38b0 libsystem_kernel.dylib`__workq_kernreturn + 8
�[40m�[37mdbug�[39m�[22m�[49m: thread #3
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f1c34 libsystem_kernel.dylib`mach_msg2_trap + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001911043a0 libsystem_kernel.dylib`mach_msg2_internal + 76
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001910fa764 libsystem_kernel.dylib`mach_msg_overwrite + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x00000001910f1fa8 libsystem_kernel.dylib`mach_msg + 24
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105ccd2f4 libcoreclr.dylib`MachMessage::Receive(unsigned int) + 80
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000105ccc61c libcoreclr.dylib`SEHExceptionThread(void*) + 164
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #4, name = '.NET SynchManager'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f7d04 libsystem_kernel.dylib`kevent + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000105cc1304 libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ReadBytesFromProcessPipe(int, unsigned char*, int) + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105cc09f0 libcoreclr.dylib`CorUnix::CPalSynchronizationManager::WorkerThread(void*) + 164
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105cca0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #5, name = '.NET EventPipe'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910fa498 libsystem_kernel.dylib`poll + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000105fbce90 libcoreclr.dylib`ds_ipc_poll(_DiagnosticsIpcPollHandle*, unsigned long, unsigned int, void (*)(char const*, unsigned int)) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x000000010606abb0 libcoreclr.dylib`ds_ipc_stream_factory_get_next_available_stream(void (*)(char const*, unsigned int)) + 756
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000106068a68 libcoreclr.dylib`server_thread(void*) + 372
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105cca0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #6, name = '.NET DebugPipe'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f2678 libsystem_kernel.dylib`__open + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001910fd6a4 libsystem_kernel.dylib`open + 64
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105fbda84 libcoreclr.dylib`TwoWayPipe::WaitForConnection() + 40
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105fb8578 libcoreclr.dylib`DbgTransportSession::TransportWorker() + 232
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105fb75c8 libcoreclr.dylib`DbgTransportSession::TransportWorkerStatic(void*) + 40
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000105cca0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #7, name = '.NET Debugger'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f53cc libsystem_kernel.dylib`__psynch_cvwait + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019113409c libsystem_pthread.dylib`_pthread_cond_wait + 984
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105cbef6c libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ThreadNativeWait(CorUnix::_ThreadNativeWaitData*, unsigned int, CorUnix::ThreadWakeupReason*, unsigned int*) + 320
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105cbebec libcoreclr.dylib`CorUnix::CPalSynchronizationManager::BlockThread(CorUnix::CPalThread*, unsigned int, bool, bool, CorUnix::ThreadWakeupReason*, unsigned int*) + 380
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105cc30cc libcoreclr.dylib`CorUnix::InternalWaitForMultipleObjectsEx(CorUnix::CPalThread*, unsigned int, void* const*, int, unsigned int, int, int) + 1600
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000105fb5da8 libcoreclr.dylib`DebuggerRCThread::MainLoop() + 228
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000105fb5c70 libcoreclr.dylib`DebuggerRCThread::ThreadProc() + 256
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000105fb5a24 libcoreclr.dylib`DebuggerRCThread::ThreadProcStatic(void*) + 56
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000105cca0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #8
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f53cc libsystem_kernel.dylib`__psynch_cvwait + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000019113409c libsystem_pthread.dylib`_pthread_cond_wait + 984
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000105cbef6c libcoreclr.dylib`CorUnix::CPalSynchronizationManager::ThreadNativeWait(CorUnix::_ThreadNativeWaitData*, unsigned int, CorUnix::ThreadWakeupReason*, unsigned int*) + 320
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x0000000105cbebec libcoreclr.dylib`CorUnix::CPalSynchronizationManager::BlockThread(CorUnix::CPalThread*, unsigned int, bool, bool, CorUnix::ThreadWakeupReason*, unsigned int*) + 380
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x0000000105cc30cc libcoreclr.dylib`CorUnix::InternalWaitForMultipleObjectsEx(CorUnix::CPalThread*, unsigned int, void* const*, int, unsigned int, int, int) + 1600
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x0000000105e10078 libcoreclr.dylib`FinalizerThread::WaitForFinalizerEvent(CLREvent*) + 240
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x0000000105e101d8 libcoreclr.dylib`FinalizerThread::FinalizerThreadWorker(void*) + 264
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x0000000105dadfa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000105dae48c libcoreclr.dylib`ManagedThreadBase::FinalizerBase(void (*)(void*)) + 36
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000105e10350 libcoreclr.dylib`FinalizerThread::FinalizerThreadStart(void*) + 88
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x0000000105cca0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #9, name = '.NET SigHandler'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f27dc libsystem_kernel.dylib`read + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000010442ce98 libSystem.Native.dylib`SignalHandlerLoop + 96
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #10
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f7d04 libsystem_kernel.dylib`kevent + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x000000010442b4a4 libSystem.Native.dylib`SystemNative_WaitForSocketEvents + 80
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001079bca7c
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x00000001079bc6b4
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x00000001079bc564
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x00000001078a1430
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x00000001078a1218
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x00000001078a1108
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000105f5cc04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000105dda988 libcoreclr.dylib`DispatchCallSimple(unsigned long*, unsigned int, unsigned long long, unsigned int) + 268
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x0000000105decc6c libcoreclr.dylib`ThreadNative::KickOffThread_Worker(void*) + 148
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x0000000105dadfa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x0000000105dae45c libcoreclr.dylib`ManagedThreadBase::KickOff(void (*)(void*), void*) + 32
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x0000000105decd44 libcoreclr.dylib`ThreadNative::KickOffThread(void*) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x0000000105cca0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #11
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f1c34 libsystem_kernel.dylib`mach_msg2_trap + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x00000001911043a0 libsystem_kernel.dylib`mach_msg2_internal + 76
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x00000001910fa764 libsystem_kernel.dylib`mach_msg_overwrite + 484
�[40m�[37mdbug�[39m�[22m�[49m: frame #3: 0x00000001910f1fa8 libsystem_kernel.dylib`mach_msg + 24
�[40m�[37mdbug�[39m�[22m�[49m: frame #4: 0x000000019121ec0c CoreFoundation`__CFRunLoopServiceMachPort + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #5: 0x000000019121d528 CoreFoundation`__CFRunLoopRun + 1208
�[40m�[37mdbug�[39m�[22m�[49m: frame #6: 0x000000019121c9e8 CoreFoundation`CFRunLoopRunSpecific + 572
�[40m�[37mdbug�[39m�[22m�[49m: frame #7: 0x00000001927ecc78 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
�[40m�[37mdbug�[39m�[22m�[49m: frame #8: 0x0000000104372f28 mlaunch`xamarin_dyn_objc_msgSend + 160
�[40m�[37mdbug�[39m�[22m�[49m: frame #9: 0x0000000107c075ac
�[40m�[37mdbug�[39m�[22m�[49m: frame #10: 0x0000000107c07470
�[40m�[37mdbug�[39m�[22m�[49m: frame #11: 0x0000000107c072a4
�[40m�[37mdbug�[39m�[22m�[49m: frame #12: 0x0000000107c03ea0
�[40m�[37mdbug�[39m�[22m�[49m: frame #13: 0x00000001078a13d8
�[40m�[37mdbug�[39m�[22m�[49m: frame #14: 0x00000001078a1218
�[40m�[37mdbug�[39m�[22m�[49m: frame #15: 0x00000001078a1108
�[40m�[37mdbug�[39m�[22m�[49m: frame #16: 0x0000000105f5cc04 libcoreclr.dylib`CallDescrWorkerInternal + 132
�[40m�[37mdbug�[39m�[22m�[49m: frame #17: 0x0000000105dda988 libcoreclr.dylib`DispatchCallSimple(unsigned long*, unsigned int, unsigned long long, unsigned int) + 268
�[40m�[37mdbug�[39m�[22m�[49m: frame #18: 0x0000000105decc6c libcoreclr.dylib`ThreadNative::KickOffThread_Worker(void*) + 148
�[40m�[37mdbug�[39m�[22m�[49m: frame #19: 0x0000000105dadfa8 libcoreclr.dylib`ManagedThreadBase_DispatchOuter(ManagedThreadCallState*) + 248
�[40m�[37mdbug�[39m�[22m�[49m: frame #20: 0x0000000105dae45c libcoreclr.dylib`ManagedThreadBase::KickOff(void (*)(void*), void*) + 32
�[40m�[37mdbug�[39m�[22m�[49m: frame #21: 0x0000000105decd44 libcoreclr.dylib`ThreadNative::KickOffThread(void*) + 172
�[40m�[37mdbug�[39m�[22m�[49m: frame #22: 0x0000000105cca0fc libcoreclr.dylib`CorUnix::CPalThread::ThreadEntry(void*) + 364
�[40m�[37mdbug�[39m�[22m�[49m: frame #23: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #12
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910f38b0 libsystem_kernel.dylib`__workq_kernreturn + 8
�[40m�[37mdbug�[39m�[22m�[49m: thread #13, name = 'com.apple.CFSocket.private'
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x00000001910fcc2c libsystem_kernel.dylib`__select + 8
�[40m�[37mdbug�[39m�[22m�[49m: frame #1: 0x0000000191244a80 CoreFoundation`__CFSocketManager + 704
�[40m�[37mdbug�[39m�[22m�[49m: frame #2: 0x0000000191133bc8 libsystem_pthread.dylib`_pthread_start + 136
�[40m�[37mdbug�[39m�[22m�[49m: thread #14
�[40m�[37mdbug�[39m�[22m�[49m: frame #0: 0x0000000000000000
�[40m�[37mdbug�[39m�[22m�[49m: (lldb) detach
�[40m�[37mdbug�[39m�[22m�[49m: Process 9273 detached
�[40m�[37mdbug�[39m�[22m�[49m: (lldb) quit
�[40m�[37mdbug�[39m�[22m�[49m: 9273 Execution timed out after 60 seconds and the process was killed.
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 137
�[40m�[37mdbug�[39m�[22m�[49m: Failed to list crash reports from device.
�[40m�[37mdbug�[39m�[22m�[49m: Test run started but crashed and no test results were reported
�[40m�[37mdbug�[39m�[22m�[49m: No crash reports, waiting 30 seconds for the crash report service...
�[41m�[30mfail�[39m�[22m�[49m: Application test run crashed
      Failed to launch the application, please try again. If the problem persists, try rebooting MacOS
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=405):
�[40m�[37mdbug�[39m�[22m�[49m: Unable to lookup in current state: Shutdown
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 149
�[41m�[30mfail�[39m�[22m�[49m: Failed to uninstall the app bundle! Check logs for more details!
XHarness exit code: 83 (APP_LAUNCH_FAILURE)
  Passed: 0
  Failed: 0
  Tests completed with exit code: 83

🟢 With fix — 📱 EditorTests (AutoSizeTextChangesEditorGrowsAfterRotation): FAIL ❌ · 195s
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 2.06 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 2.08 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 2.09 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 2.15 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 2.15 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 2.15 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 2.15 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 2.13 sec).
  5 of 13 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Release/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Release/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Release/net10.0-ios26.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Release/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  TestUtils.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.dll
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Release/net10.0-ios26.0/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
  TestUtils.DeviceTests.Runners -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners/Release/net10.0-ios/Microsoft.Maui.TestUtils.DeviceTests.Runners.dll
  Core.DeviceTests.Shared -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core.DeviceTests.Shared/Release/net10.0-ios/Microsoft.Maui.DeviceTests.Shared.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Release/net10.0-ios26.0/Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Release/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
  TestUtils.DeviceTests.Runners.SourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/TestUtils.DeviceTests.Runners.SourceGen/Release/netstandard2.0/Microsoft.Maui.TestUtils.DeviceTests.Runners.SourceGen.dll
  Detected signing identity:
    Code Signing Key: "" (-)
    Provisioning Profile: "" () - no entitlements
    Bundle Id: com.microsoft.maui.controls.devicetests
    App Id: com.microsoft.maui.controls.devicetests
  Controls.DeviceTests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.dll
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size. This process might take a while.
  IL stripping assemblies

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:02:39.83
[11.0.0-prerelease.26107.1+bfbac237157e59cdbd19334325b2af80bd6e9828] XHarness command issued: apple test --app artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app --target ios-simulator-64_18.6 --device 533D0570-314E-4BEC-91E1-5A77923790F8 -o artifacts/log --timeout 01:00:00 -v --set-env=TestFilter=Category=Editor
�[40m�[32minfo�[39m�[22m�[49m: Preparing run for ios-simulator-64_18.6 targeting 533D0570-314E-4BEC-91E1-5A77923790F8
�[40m�[32minfo�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators..
�[40m�[37mdbug�[39m�[22m�[49m: Looking for available ios-simulator-64_18.6 simulators. Storing logs into list-ios-simulator-64_18.6-20260506_140931.log
�[40m�[32minfo�[39m�[22m�[49m: Found simulator device 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Getting app bundle information from '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'..
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /usr/libexec/PlistBuddy
�[40m�[37mdbug�[39m�[22m�[49m: Process PlistBuddy exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling any previous instance of 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
�[40m�[32minfo�[39m�[22m�[49m: Installing application 'Microsoft.Maui.Controls.DeviceTests' on 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: Installing '/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app' to 'iPhone 11 Pro' (144.22 MB)
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Using Xcode 26.1.1 found in /Applications/Xcode_26.1.1.app
�[40m�[37mdbug�[39m�[22m�[49m: xcrun simctl list --json --json-output /tmp/tmpjw5x8d.tmp
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: No need to boot (already booted): iPhone 11 Pro
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: Installing on iPhone 11 Pro (533D0570-314E-4BEC-91E1-5A77923790F8) by executing 'xcrun simctl install 533D0570-314E-4BEC-91E1-5A77923790F8 /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.DeviceTests/Release/net10.0-ios/iossimulator-arm64/Microsoft.Maui.Controls.DeviceTests.app'
�[40m�[37mdbug�[39m�[22m�[49m: Xamarin.Hosting: The bundle id com.microsoft.maui.controls.devicetests was successfully installed.
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'Microsoft.Maui.Controls.DeviceTests' was installed successfully on 'iPhone 11 Pro'
�[40m�[32minfo�[39m�[22m�[49m: Starting test run for com.microsoft.maui.controls.devicetests..
�[40m�[37mdbug�[39m�[22m�[49m: *** Executing 'Microsoft.Maui.Controls.DeviceTests' on ios-simulator-64_18.6 'iPhone 11 Pro' ***
�[40m�[37mdbug�[39m�[22m�[49m: Test log server listening on: 0.0.0.0:50300
�[40m�[37mdbug�[39m�[22m�[49m: System log for the 'iPhone 11 Pro' simulator is: /Users/cloudtest/Library/Logs/CoreSimulator/533D0570-314E-4BEC-91E1-5A77923790F8/system.log
�[40m�[37mdbug�[39m�[22m�[49m: Simulator 'iPhone 11 Pro' is already booted
�[40m�[37mdbug�[39m�[22m�[49m: Scanning log stream for Microsoft.Maui.Controls.DeviceTests into '/Users/cloudtest/vss/_work/1/s/artifacts/log/Microsoft.Maui.Controls.DeviceTests.log'..
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Launching the app
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Users/cloudtest/.nuget/packages/microsoft.dotnet.xharness.cli/11.0.0-prerelease.26107.1/tools/net10.0/any/../../../runtimes/any/native/mlaunch/bin/mlaunch
�[40m�[37mdbug�[39m�[22m�[49m: Connection from 127.0.0.1:50321 saving logs to /Users/cloudtest/vss/_work/1/s/artifacts/log/test-ios-simulator-64_18.6-20260506_140934.log
�[40m�[37mdbug�[39m�[22m�[49m: Tests have finished executing
�[40m�[37mdbug�[39m�[22m�[49m: Process mlaunch exited with 0
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 137
�[40m�[37mdbug�[39m�[22m�[49m: Test run completed
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /bin/bash
�[40m�[37mdbug�[39m�[22m�[49m: cp: /Users/cloudtest/Library/Developer/CoreSimulator/Devices/533D0570-314E-4BEC-91E1-5A77923790F8/data/Containers/Data/Application/81A98E89-8441-4298-99FD-EC803D90A396/Documents/test-results.xml: No such file or directory
�[40m�[37mdbug�[39m�[22m�[49m: Process bash exited with 1
�[40m�[37mdbug�[39m�[22m�[49m: Test run failed
�[40m�[37mdbug�[39m�[22m�[49m: No crash reports, waiting 5 seconds for the crash report service...
�[40m�[32minfo�[39m�[22m�[49m: Application finished the test run successfully with some failed tests
�[40m�[32minfo�[39m�[22m�[49m: Tests run: 58 Passed: 56 Inconclusive: 0 Failed: 2 Ignored: 0
�[40m�[32minfo�[39m�[22m�[49m: Uninstalling the application 'com.microsoft.maui.controls.devicetests' from 'iPhone 11 Pro'
�[40m�[37mdbug�[39m�[22m�[49m: 
�[40m�[37mdbug�[39m�[22m�[49m: Running /Applications/Xcode_26.1.1.app/Contents/Developer/usr/bin/simctl
�[40m�[37mdbug�[39m�[22m�[49m: Process simctl exited with 0
�[40m�[32minfo�[39m�[22m�[49m: Application 'com.microsoft.maui.controls.devicetests' was uninstalled successfully
XHarness exit code: 1 (TESTS_FAILED)
  Passed: 114
  Failed: 6
  Tests completed with exit code: 1

🔴 Without fix — 🖥️ Issue35114: FAIL ✅ · 136s
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 817 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 822 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 849 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 1.01 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 1.01 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 1.01 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 1.01 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 1.03 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Foldable/src/Controls.Foldable.csproj (in 1.16 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj (in 1.8 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 1.81 sec).
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
  Microsoft.AspNetCore.Components.WebView.Maui -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-ios26.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
  Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
  Detected signing identity:
    Code Signing Key: "" (-)
    Provisioning Profile: "" () - no entitlements
    Bundle Id: com.microsoft.maui.uitests
    App Id: com.microsoft.maui.uitests
  Controls.TestCases.HostApp -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-ios/iossimulator-arm64/Controls.TestCases.HostApp.dll
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size. This process might take a while.

Build succeeded.

/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
    1 Warning(s)
    0 Error(s)

Time Elapsed 00:00:50.86
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/CustomAttributes/Controls.CustomAttributes.csproj (in 578 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 581 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils/VisualTestUtils.csproj (in 578 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 578 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Core/UITest.Core.csproj (in 578 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 32 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 652 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 674 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.NUnit/UITest.NUnit.csproj (in 1.4 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Appium/UITest.Appium.csproj (in 1.49 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/UITest.Analyzers/UITest.Analyzers.csproj (in 3.16 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/TestUtils/src/VisualTestUtils.MagickNet/VisualTestUtils.MagickNet.csproj (in 2.71 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.iOS.Tests/Controls.TestCases.iOS.Tests.csproj (in 3.34 sec).
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.CustomAttributes -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
  UITest.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
  VisualTestUtils -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
  UITest.NUnit -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
  VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
  UITest.Appium -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
  UITest.Analyzers -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
  Controls.TestCases.iOS.Tests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
Test run for /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (arm64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.05]   Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.15]   Discovered:  Controls.TestCases.iOS.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 5/6/2026 2:06:31 PM FixtureSetup for Issue35114(iOS)
>>>>> 5/6/2026 2:06:34 PM EditorCanBeScrolledAfterRotation Start
>>>>> 5/6/2026 2:06:38 PM EditorCanBeScrolledAfterRotation Stop
>>>>> 5/6/2026 2:06:38 PM Log types: syslog, crashlog, performance, safariConsole, safariNetwork, server
  Failed EditorCanBeScrolledAfterRotation [3 s]
  Error Message:
     Editor height should not grow after rotation. Before: 34, After: 134
Assert.That(heightAfter, Is.EqualTo(heightBefore).Within(1))
  Expected: 34 +/- 1
  But was:  134
  Off by:   -100.0d

  Stack Trace:
     at Microsoft.Maui.TestCases.Tests.Issues.Issue35114.EditorCanBeScrolledAfterRotation() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs:line 53

1)    at Microsoft.Maui.TestCases.Tests.Issues.Issue35114.EditorCanBeScrolledAfterRotation() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs:line 53


NUnit Adapter 4.5.0.0: Test execution complete

Test Run Failed.
Total tests: 1
     Failed: 1
 Total time: 48.5954 Seconds

🟢 With fix — 🖥️ Issue35114: PASS ✅ · 96s
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 2.08 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 2.1 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 2.11 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 2.18 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 2.18 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 2.18 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/maps/src/Maps.csproj (in 2.14 sec).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 2.19 sec).
  3 of 11 projects are up-to-date for restore.
/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0-ios26.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0-ios26.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0-ios26.0/Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Maps.dll
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Foldable -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Foldable/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Foldable.dll
  Controls.Maps -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Maps.dll
  Controls.Xaml -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0-ios26.0/Microsoft.Maui.Controls.Xaml.dll
  Microsoft.AspNetCore.Components.WebView.Maui -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Microsoft.AspNetCore.Components.WebView.Maui/Debug/net10.0-ios26.0/Microsoft.AspNetCore.Components.WebView.Maui.dll
  Detected signing identity:
    Code Signing Key: "" (-)
    Provisioning Profile: "" () - no entitlements
    Bundle Id: com.microsoft.maui.uitests
    App Id: com.microsoft.maui.uitests
  Controls.TestCases.HostApp -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.HostApp/Debug/net10.0-ios/iossimulator-arm64/Controls.TestCases.HostApp.dll
  Optimizing assemblies for size may change the behavior of the app. Be sure to test after publishing. See: https://aka.ms/dotnet-illink
  Optimizing assemblies for size. This process might take a while.

Build succeeded.

/Users/cloudtest/vss/_work/1/s/.dotnet/packs/Microsoft.iOS.Sdk.net10.0_26.0/26.0.11017/targets/Xamarin.Shared.Sdk.targets(309,3): warning : RuntimeIdentifier was set on the command line, and will override the value for RuntimeIdentifiers set in the project file. [/Users/cloudtest/vss/_work/1/s/src/Controls/tests/TestCases.HostApp/Controls.TestCases.HostApp.csproj::TargetFramework=net10.0-ios]
    1 Warning(s)
    0 Error(s)

Time Elapsed 00:00:45.86
  Determining projects to restore...
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/BindingSourceGen/Controls.BindingSourceGen.csproj (in 347 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 349 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Essentials/src/Essentials.csproj (in 351 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Core/src/Core.csproj (in 316 ms).
  Restored /Users/cloudtest/vss/_work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 384 ms).
  8 of 13 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.CustomAttributes -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.CustomAttributes/Debug/net10.0/Controls.CustomAttributes.dll
  Graphics -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Essentials -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
  Controls.BindingSourceGen -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.70-ci+azdo.14031427
  Controls.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
  UITest.Core -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Core/Debug/net10.0/UITest.Core.dll
  VisualTestUtils -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils/Debug/netstandard2.0/VisualTestUtils.dll
  UITest.Appium -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Appium/Debug/net10.0/UITest.Appium.dll
  UITest.NUnit -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.NUnit/Debug/net10.0/UITest.NUnit.dll
  VisualTestUtils.MagickNet -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/VisualTestUtils.MagickNet/Debug/netstandard2.0/VisualTestUtils.MagickNet.dll
  UITest.Analyzers -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/UITest.Analyzers/Debug/netstandard2.0/UITest.Analyzers.dll
  Controls.TestCases.iOS.Tests -> /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
Test run for /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (arm64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
/Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.05]   Discovering: Controls.TestCases.iOS.Tests
[xUnit.net 00:00:00.16]   Discovered:  Controls.TestCases.iOS.Tests
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in /Users/cloudtest/vss/_work/1/s/artifacts/bin/Controls.TestCases.iOS.Tests/Debug/net10.0/Controls.TestCases.iOS.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 5/6/2026 2:11:22 PM FixtureSetup for Issue35114(iOS)
>>>>> 5/6/2026 2:11:26 PM EditorCanBeScrolledAfterRotation Start
>>>>> 5/6/2026 2:11:30 PM EditorCanBeScrolledAfterRotation Stop
  Passed EditorCanBeScrolledAfterRotation [3 s]
NUnit Adapter 4.5.0.0: Test execution complete

Test Run Successful.
Total tests: 1
     Passed: 1
 Total time: 20.4162 Seconds

⚠️ Failure Details

  • EditorTests (AutoSizeTextChangesEditorGrowsAfterRotation) PASSED without fix (should fail) — tests don't catch the bug
  • EditorTests (AutoSizeTextChangesEditorGrowsAfterRotation) FAILED with fix (should pass)
    • Device tests: 6 of 120 failed
📁 Fix files reverted (5 files)
  • eng/pipelines/ci-copilot.yml
  • src/Controls/src/Core/Editor/Editor.Mapper.cs
  • src/Controls/src/Core/Editor/Editor.iOS.cs
  • src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
  • src/Core/src/Platform/iOS/MauiTextView.cs

🧪 UI Tests — Category Detection

Detected UI test categories: Editor,ViewBaseTests


🔍 Pre-Flight — Context & Validation

Issue: #35114 - [.NET 10][iOS] D2 - Editor can't be scrolled after rotating simulator.
PR: #35309 - [iOS] Fix Editor losing scrollability after rotation when CharacterSpacing is applied
Platforms Affected: iOS (and MacCatalyst via #if IOS || MACCATALYST)
Files Changed: 4 implementation, 3 test

Key Findings

  • Regression introduced in PR [net10.0] Fix SafeArea management on iOS #30629 which added ValidateSafeArea()InvalidateConstraintsCache() in MauiView.LayoutSubviews, clearing _lastMeasuredSize, causing needsMeasure = true on rotation.
  • During re-measurement, Editor's GetDesiredSize is called with heightConstraint = Infinity. The original code just used SizeThatFits.Height, which returns the full content height, causing the Editor to expand and lose scrollability.
  • Fix adds AllowAutoGrowth flag to MauiTextView to distinguish between:
    • Normal Editor (no AutoSize): should cap height to current frame when content overflows
    • AutoSize=TextChanges: should grow freely
  • MapAutoSize is added to Editor.iOS.cs and registered in Editor.Mapper.cs for iOS/MacCatalyst
  • A second cap is also added for finite constraints (UITextView.SizeThatFits ignores height argument)
  • Test coverage includes: UI test (Issue35114.cs), Device test (EditorTests.iOS.cs)

Code Review Summary

Verdict: NEEDS_CHANGES
Confidence: high
Errors: 2 | Warnings: 2 | Suggestions: 1

Key code review findings:

  • Bounds.Height ratcheting across rotation cycles — EditorHandler.iOS.cs:72. Bounds.Height reads the last-arranged value, which shrinks across rotations causing permanent height reduction. Should use a handler-owned _scrollableFrameHeight field.
  • ❌ Second cap ignores AllowAutoGrowth for finite constraints — EditorHandler.iOS.cs:98. The unconditional result.Height > heightConstraint cap fires even for AutoSize=TextChanges editors in Grid rows, silently preventing growth. Fix: add !PlatformView.AllowAutoGrowth guard.
  • ⚠️ AllowAutoGrowth flag leaks Controls concepts into Core MauiTextView.cs:101. Any handler subclass or direct Core usage gets height-capping with no escape hatch.
  • ⚠️ Missing device test for the actual regression scenario (scrollable AutoSize=Disabled editor not growing after width-constraint cycle).
  • 💡 Replace Task.Delay(2000).Wait() with retry loop for height stability in Issue35114.cs:46.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #35309 Cap heightConstraint to current frame height when ContentSize.Height > currentHeight and !AllowAutoGrowth; add second cap for finite constraint results ❌ Gate FAILED EditorHandler.iOS.cs, MauiTextView.cs, Editor.iOS.cs, Editor.Mapper.cs + 3 test files Original PR

🔬 Code Review — Deep Analysis

Code Review — PR #35309

Independent Assessment

What this changes: On iOS, EditorHandler.GetDesiredSize now caps the measured height to the current frame height when two conditions hold: the editor's content overflows its frame and AllowAutoGrowth is false. A new internal bool AllowAutoGrowth flag on MauiTextView (set by a Controls-layer MapAutoSize mapper) exempts AutoSize=TextChanges editors from the cap. A second unconditional cap is also applied after base.GetDesiredSize to handle the UIScrollView subclass quirk where SizeThatFits ignores its height argument.

Inferred motivation: Something in the layout pipeline (likely cache invalidation on rotation) causes a re-measurement with an infinite height constraint. UITextView.SizeThatFits returns the full content height, expanding a previously-scrollable editor and losing its scroll behaviour. The fix is to detect scrollable state (content overflows frame) and cap the reported desired size to the current frame height.


Reconciliation with PR Narrative

Author claims: The regression was introduced by #30629 (ValidateSafeArea → InvalidateConstraintsCache), which clears the measurement cache on rotation, causing a full re-measure pass with infinite height. SizeThatFits then returns full content height and expands the editor.

Agreement/Disagreement: The root cause analysis is correct and the code matches it. The currentHeight > 0 guard correctly handles the first-time-layout case (no Bounds yet). The AllowAutoGrowth exemption for AutoSize=TextChanges is correctly implemented for the infinite constraint path. Two concrete issues were found in the implementation (see Findings 1 & 2).


Findings

❌ Error — Bounds.Height ratcheting across rotation cycles

src/Core/src/Handlers/Editor/EditorHandler.iOS.cs:72

currentHeight = (double)PlatformView.Bounds.Height reads whatever the platform last arranged the view at — not the intended logical height. After portrait→landscape rotation, if the parent container arranges the editor at a reduced height, Bounds.Height reflects that shorter value. The next portrait remeasure then uses this already-shrunken value as the cap, permanently reducing the editor's height across rotation cycles.

Concrete path: portrait scrollable editor at 150pt (content=200pt) → landscape arrangement at 90pt (narrower window, more lines fit in width, but page gives less height) → Bounds.Height=90 → portrait remeasure caps at 90pt, editor now 60pt shorter than intended.

The fix should persist the scrollable cap in a handler-owned field (_scrollableFrameHeight) updated only on the transition into scrollable state (content overflow detected for the first time), not re-read from Bounds on every measurement call.

❌ Error — Second cap ignores AllowAutoGrowth for finite height constraints

src/Core/src/Handlers/Editor/EditorHandler.iOS.cs:98

The AllowAutoGrowth check at line 80 only guards the double.IsInfinity(heightConstraint) branch. The second unconditional cap at lines 98–101 fires for any finite heightConstraint, including for AutoSize=TextChanges editors in containers that compute finite row heights.

Concrete path: AutoSize=TextChanges editor inside a Grid with RowDefinition Height="*". Grid computes a finite heightConstraint of 200pt. Content is 250pt. base.GetDesiredSize returns 250pt (UITextView ignores height in SizeThatFits). Second cap fires: reports 200pt — editor silently cannot grow even though AllowAutoGrowth=true.

Fix:

if (!PlatformView.AllowAutoGrowth && result.Height > heightConstraint)
{
    return new Size(result.Width, heightConstraint);
}

⚠️ Warning — Controls-layer concept leaks into Core platform view

src/Core/src/Platform/iOS/MauiTextView.cs:101

AllowAutoGrowth is internal and only settable from Controls.Editor via MapAutoSize. Any code that uses EditorHandler without going through the Controls mapper (direct Core usage, subclassed handlers, Essentials-style custom editors) gets height-capping with no escape hatch.

Consider moving the flag to EditorHandler as a protected bool _allowAutoGrowth field. This keeps MauiTextView free of Controls semantics and lets any handler subclass opt in without needing internal access to the platform view.

⚠️ Warning — Missing regression device test for the actual bug scenario

src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs:67

The device test covers the positive case (AutoSize=TextChanges still grows). The actual regression — a scrollable AutoSize=Disabled editor must NOT grow after measurement-cache invalidation — is covered only by the UI test (Issue35114.cs), which requires real device rotation, runs only on mobile platforms, and is hard to reproduce locally.

Add a companion device test: editor with HeightRequest=80, text that overflows to >80pt, width-constraint cycle (simulates rotation), assert editor.Height remains 80pt throughout.

💡 Suggestion — Replace blocking Task.Delay(2000).Wait() in UI test

src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs:46

Task.Delay(2000).Wait() is a synchronous thread-block. On slow CI agents this may be insufficient (flaky); on fast agents it wastes time. App.WaitForElement("TestEditor") on line 48 already covers element availability. Replace with a retry loop that polls for height stability.


Devil's Advocate

On Finding 1 (ratcheting): Could Bounds.Height actually stay stable across rotations? Only if the parent always arranges the editor at the same height regardless of orientation. For editors inside a ScrollView or Grid with a fixed HeightRequest, this would be true — no ratcheting. The bug only manifests when the parent's available height changes with orientation. The scenario is realistic (e.g. editor filling half the screen in a relative layout). The finding stands.

On Finding 2 (second cap): An AutoSize=TextChanges editor in a finite-height container is an unusual configuration, since AutoSize is designed for editors that grow freely. Developers who set both AutoSize=TextChanges and put it in a fixed-height row may not expect growth anyway. However, the cap would also fire for editors in dynamic layouts where the grid row height is Auto or * but happens to resolve to a finite value during the problematic re-measure cycle. The guard is cheap and safe to add.

On CI being green: All required checks pass. The test base confirms the positive path works. But the missing regression device test means the negative path isn't validated in fast CI.


Verdict: NEEDS_CHANGES

Confidence: high

Summary: The root cause analysis and overall approach are correct. The AllowAutoGrowth guard in the infinite-constraint path works as intended, and the test for the AutoSize=TextChanges case is solid. However, two concrete bugs were found: Bounds.Height can ratchet downward across rotation cycles for dynamically-sized editors, and the second unconditional cap bypasses AllowAutoGrowth for editors under finite constraints, which can silently prevent AutoSize=TextChanges from growing in certain layout configurations. Both are straightforward to fix.


🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Override SizeThatFits in MauiTextView to cap at Frame.Size.Height when !AllowAutoGrowth; no GetDesiredSize changes ✅ PASS MauiTextView.cs, Editor.iOS.cs, Editor.Mapper.cs, 2x PublicAPI Fixes at platform view level
2 try-fix Read Frame.Size.Height BEFORE calling SizeThatFits in GetDesiredSize; cap to pre-call frame height ✅ PASS EditorHandler.iOS.cs, MauiTextView.cs, Editor.iOS.cs, Editor.Mapper.cs Fixes Bounds stale-read ordering
3 try-fix Handler-owned AllowAutoGrowth on EditorHandler (not platform view); set via MapAutoSize; Frame.Height cap; guarded 2nd cap ✅ PASS EditorHandler.iOS.cs, Editor.iOS.cs, Editor.Mapper.cs Cleanest architecture: no Controls leak into Core
4 try-fix IAutoSizeAwareEditor interface on Editor; live VirtualView cast in handler; no flag, no mapper; Frame.Height cap; guarded 2nd cap ✅ PASS EditorHandler.iOS.cs, Editor.iOS.cs Fewest files; pull model; addresses both code-review errors
PR PR #35309 Cap heightConstraint in GetDesiredSize using Bounds.Height+ContentSize.Height; AllowAutoGrowth on MauiTextView; unconditional 2nd cap ❌ Gate FAILED 4 impl + 3 test files Original PR; 2 code-review ❌ errors

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 2 NO NEW IDEAS Attempt-1 approach exhausts the SizeThatFits override path
claude-sonnet-4.6 2 NO NEW IDEAS Attempt-2 variant already covers pre-call Frame capture
gpt-5.3-codex 2 NO NEW IDEAS Attempt-3 handler-field approach is distinct; no further variants
gemini-3-pro-preview (claude-sonnet-4.6) 2 NO NEW IDEAS Attempt-4 interface approach is most minimal possible

Exhausted: Yes
Selected Fix: try-fix-4 (IAutoSizeAwareEditor interface approach) — fewest files changed, eliminates the flag/mapper entirely, addresses both code-review ❌ errors, and uses Frame.Height (not Bounds.Height). Tests pass on first run.


📋 Report — Final Recommendation

⚠️ Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE 7 files changed; iOS rotation bug in EditorHandler
Code Review NEEDS_CHANGES (high) 2 errors, 2 warnings, 1 suggestion
Gate ❌ FAILED iOS — tests did not pass with PR's fix
Try-Fix ✅ COMPLETE 4 attempts, 4 passing
Expert Eval (pr-plus-reviewer) ✅ COMPLETE Addresses both code-review errors; still flag-on-view architecture
Report ✅ COMPLETE

Code Review Impact on Try-Fix

The two ❌ Error findings from the code review (Bounds.Height ratchet and unconditional second cap) directly guided the try-fix dimension focus. All 4 models addressed these issues — the first by fixing at the SizeThatFits level (Attempt 1), the second by reading Frame.Height before SizeThatFits (Attempt 2), the third by moving the flag to the handler (Attempt 3), and the fourth by eliminating the flag entirely via a Core-defined interface (Attempt 4). The pr-plus-reviewer candidate applied the minimal code-review fixes to the PR's original architecture. The interface approach in try-fix-4 additionally resolved the ⚠️ Warning about Controls semantics leaking into Core's MauiTextView.

Comparative Analysis

Candidate Gate/Test Code Review Errors Files Changed Architecture Quality Notes
pr ❌ FAILED 2 ❌ errors remain 7 Controls leaks into Core MauiTextView; Bounds.Height ratchet; unconditional second cap Submitted PR
pr-plus-reviewer ⚠️ NOT RE-TESTED (sandbox) 0 ❌ errors 7 Still leaks AllowAutoGrowth into Core MauiTextView; correct Frame.Height; guarded second cap Conservative fix
try-fix-1 ✅ PASS 0 errors 5 Override SizeThatFits in MauiTextView; still leaks Controls flag; adds PublicAPI entry Platform-level fix
try-fix-2 ✅ PASS 0 errors 4 Same as PR architecture but reads Frame.Height pre-SizeThatFits Minimal delta from PR
try-fix-3 ✅ PASS 0 errors 3 Handler-owned field; no Controls in Core MauiTextView Clean separation
try-fix-4 PASS 0 errors 2 Core-defined interface; pure pull model; no flag anywhere; Frame.Height; guarded second cap WINNER

Summary

PR #35309 addresses a real regression (iOS Editor loses scrollability after rotation) with a correct root cause analysis. However, the gate failed and the implementation has two concrete bugs: Bounds.Height ratchets across rotation cycles for UIScrollView subclasses, and the second unconditional cap prevents AutoSize=TextChanges editors from growing in finite-height containers. The try-fix exploration found four passing alternatives; try-fix-4's IAutoSizeAwareEditor interface approach is the strongest — it addresses both code-review errors, eliminates the Controls-leaking flag from Core, requires the fewest file changes, and uses a pull model that eliminates stale state entirely.

Root Cause

MauiView.LayoutSubviews (added in PR #30629 via ValidateSafeArea → InvalidateConstraintsCache) clears _lastMeasuredSize on rotation. On re-measure, GetDesiredSize receives heightConstraint=Infinity and UITextView.SizeThatFits (a UIScrollView subclass) returns full content height, expanding the editor and losing scrollability.

Fix Quality

The recommended fix (try-fix-4) is superior to the submitted PR because: (1) it uses Frame.Height instead of Bounds.Height, avoiding height ratcheting across rotation cycles; (2) the second cap is guarded by ShouldRestrictHeight, ensuring AutoSize=TextChanges editors work in any layout container; (3) it removes the AllowAutoGrowth flag from MauiTextView entirely, keeping Core free of Controls-layer semantics; (4) it requires only 2 source files changed instead of 4, with the same test coverage.

Selected Fix: try-fix-4 (IAutoSizeAwareEditor interface approach)


@MauiBot MauiBot left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

🤖 Automated review — alternative fix proposed

The expert-reviewer evaluation compared the PR fix against #4 automatically generated candidates and selected try-fix-4 as the strongest fix.

Why: try-fix-4 IAutoSizeAwareEditor interface passes gate tests, addresses both code-review errors (Bounds.Height ratchet fixed to Frame.Height; unconditional second cap guarded by ShouldRestrictHeight), eliminates AllowAutoGrowth from Core MauiTextView, and only changes 2 source files.

Please consider applying the candidate diff below (or use it as guidance). Once you push an update, this workflow will re-trigger and re-evaluate.

Candidate diff (`try-fix-4`)
diff --git a/src/Controls/src/Core/Editor/Editor.iOS.cs b/src/Controls/src/Core/Editor/Editor.iOS.cs
index 1430b10cb4..57ea6172c7 100644
--- a/src/Controls/src/Core/Editor/Editor.iOS.cs
+++ b/src/Controls/src/Core/Editor/Editor.iOS.cs
@@ -1,8 +1,13 @@
 #nullable disable
 namespace Microsoft.Maui.Controls
 {
-	public partial class Editor
+	public partial class Editor : IAutoSizeAwareEditor
 	{
+		// Implements IAutoSizeAwareEditor (defined in Core/Handlers/Editor/EditorHandler.iOS.cs).
+		// Accessible via InternalsVisibleTo("Microsoft.Maui.Controls") in Core's AssemblyInfo.cs.
+		bool IAutoSizeAwareEditor.ShouldRestrictHeight =>
+			AutoSize != EditorAutoSizeOption.TextChanges;
+
 		public static void MapText(EditorHandler handler, Editor editor) =>
 			MapText((IEditorHandler)handler, editor);
 
diff --git a/src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs b/src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs
index b6bd3764ce..e500cbd547 100644
--- a/src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs
+++ b/src/Controls/tests/DeviceTests/Elements/Editor/EditorTests.iOS.cs
@@ -64,6 +64,56 @@ namespace Microsoft.Maui.DeviceTests
 			});
 		}
 
+		[Fact]
+		[Description("Editor with AutoSize=TextChanges should continue to grow after a simulated rotation (width constraint change)")]
+		public async Task AutoSizeTextChangesEditorGrowsAfterRotation()
+		{
+			// Regression test for https://github.com/dotnet/maui/issues/35114
+			// Verifies that AllowAutoGrowth remains true after a width constraint change
+			// (which is what happens internally during portrait↔landscape rotation).
+			SetupBuilder();
+
+			var editor = new Editor
+			{
+				AutoSize = EditorAutoSizeOption.TextChanges,
+				Text = "Line1\nLine2\nLine3",
+				WidthRequest = 200,
+			};
+
+			var layout = new VerticalStackLayout
+			{
+				WidthRequest = 200,
+				HorizontalOptions = LayoutOptions.Start,
+				VerticalOptions = LayoutOptions.Start,
+				Children = { editor }
+			};
+
+			await AttachAndRun<LayoutHandler>(layout, async (_) =>
+			{
+				var frame = editor.Frame;
+				await WaitForUIUpdate(frame, editor);
+				var heightBeforeRotation = editor.Height;
+
+				// Simulate rotation: portrait → landscape (widen) → portrait (narrow)
+				frame = editor.Frame;
+				layout.WidthRequest = 400;
+				await WaitForUIUpdate(frame, editor);
+
+				frame = editor.Frame;
+				layout.WidthRequest = 200;
+				await WaitForUIUpdate(frame, editor);
+
+				// After simulated rotation, typing more text should still grow the editor
+				frame = editor.Frame;
+				editor.Text += "\nLine4\nLine5\nLine6";
+				await WaitForUIUpdate(frame, editor);
+
+				Assert.True(editor.Height > heightBeforeRotation,
+					$"Editor with AutoSize=TextChanges should still grow after rotation. Before: {heightBeforeRotation}, After: {editor.Height}");
+			});
+		}
+
+
 		[Category(TestCategory.Editor)]
 		public class PlaceholderTests : ControlsHandlerTestBase
 		{
diff --git a/src/Controls/tests/TestCases.HostApp/Issues/Issue35114.cs b/src/Controls/tests/TestCases.HostApp/Issues/Issue35114.cs
new file mode 100644
index 0000000000..cc37199e1f
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/Issues/Issue35114.cs
@@ -0,0 +1,38 @@
+namespace Maui.Controls.Sample.Issues;
+
+[Issue(IssueTracker.Github, 35114, "Editor can not be scrolled after rotating simulator", PlatformAffected.iOS)]
+public class Issue35114 : ContentPage
+{
+	public Issue35114()
+	{
+		Title = "Issue 35114";
+
+		var slider = new Slider
+		{
+			AutomationId = "Slider",
+			Maximum = 300,
+			Minimum = 0
+		};
+
+		var editor = new Editor
+		{
+			AutomationId = "TestEditor",
+			Text = "testing"
+		};
+
+		editor.BindingContext = slider;
+		editor.SetBinding(Editor.CharacterSpacingProperty, new Binding("Value"));
+
+		Content = new VerticalStackLayout
+		{
+			Children =
+			{
+				new Label { Text = "1. Drag the slider to the right to increase character spacing on the Editor." },
+				new Label { Text = "2. Rotate the device to landscape and back to portrait." },
+				new Label { Text = "3. The test fails if the Editor grows to full content height after rotation (it should remain scrollable)." },
+				slider,
+				editor
+			}
+		};
+	}
+}
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs
new file mode 100644
index 0000000000..b225f400ae
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue35114.cs
@@ -0,0 +1,57 @@
+#if IOS || ANDROID // The SetOrientation method is only supported on mobile platforms.
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests.Issues;
+
+public class Issue35114 : _IssuesUITest
+{
+	public Issue35114(TestDevice device) : base(device)
+	{
+	}
+
+	public override string Issue => "Editor can not be scrolled after rotating simulator";
+
+	[TearDown]
+	public void TearDown()
+	{
+		App.SetOrientationPortrait();
+	}
+
+	[Test]
+	[Category(UITestCategories.Editor)]
+	public void EditorCanBeScrolledAfterRotation()
+	{
+		// Step 1: Wait for slider and drag it to max
+		var sliderRect = App.WaitForElement("Slider").GetRect();
+		App.DragCoordinates(
+			sliderRect.X + 5,
+			sliderRect.Y + sliderRect.Height / 2,
+			sliderRect.X + sliderRect.Width - 5,
+			sliderRect.Y + sliderRect.Height / 2);
+		App.WaitForElement("TestEditor");
+
+		// Step 2: Get editor height before rotation
+		var editorRectBefore = App.WaitForElement("TestEditor").GetRect();
+		var heightBefore = editorRectBefore.Height;
+
+		// Step 3: Rotate to landscape
+		App.SetOrientationLandscape();
+		App.WaitForElement("TestEditor");
+
+		// Step 4: Rotate back to portrait
+		App.SetOrientationPortrait();
+		// Allow time for layout to settle after rotation
+		Task.Delay(2000).Wait();
+		App.WaitForElement("TestEditor");
+
+		// Step 5: Get editor height after rotation — should NOT grow
+		var editorRectAfter = App.WaitForElement("TestEditor").GetRect();
+		var heightAfter = editorRectAfter.Height;
+
+		Assert.That(heightAfter, Is.EqualTo(heightBefore).Within(1),
+			$"Editor height should not grow after rotation. Before: {heightBefore}, After: {heightAfter}");
+	}
+}
+#endif
diff --git a/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs b/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
index aaf1a2ec7e..5a7cdfb0c9 100644
--- a/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
+++ b/src/Core/src/Handlers/Editor/EditorHandler.iOS.cs
@@ -7,6 +7,17 @@ using UIKit;
 
 namespace Microsoft.Maui.Handlers
 {
+	// Implemented by Controls.Editor to signal whether the editor height should be
+	// capped to its current platform frame height when measured with infinite height.
+	// Core cannot reference Controls, so the interface is defined here and Controls
+	// implements it (allowed via InternalsVisibleTo).
+	internal interface IAutoSizeAwareEditor
+	{
+		// Returns true when the editor should NOT grow past its committed frame height
+		// (i.e. AutoSize != TextChanges). False means the editor may expand freely.
+		bool ShouldRestrictHeight { get; }
+	}
+
 	public partial class EditorHandler : ViewHandler<IEditor, MauiTextView>
 	{
 		readonly MauiTextViewEventProxy _proxy = new();
@@ -69,11 +80,42 @@ namespace Microsoft.Maui.Handlers
 
 				if (double.IsInfinity(heightConstraint))
 				{
-					heightConstraint = sizeThatFits.Height;
+					var currentHeight = (double)PlatformView.Frame.Height;
+
+					// When the editor is not in auto-growth mode (AutoSize != TextChanges),
+					// cap the infinite height constraint to the current platform frame height.
+					// This prevents UITextView.SizeThatFits (a UIScrollView subclass that always
+					// returns full content height) from expanding a scrollable editor to its full
+					// content height after cache invalidation on rotation (#35114).
+					// Frame.Height is used rather than Bounds.Height because Bounds can ratchet
+					// across rotation cycles for UIScrollView subclasses.
+					bool restrictHeight = (VirtualView as IAutoSizeAwareEditor)?.ShouldRestrictHeight ?? false;
+					if (restrictHeight
+						&& currentHeight > 0
+						&& PlatformView.ContentSize.Height > currentHeight)
+					{
+						heightConstraint = currentHeight;
+					}
+					else
+					{
+						heightConstraint = sizeThatFits.Height;
+					}
 				}
 			}
 
-			return base.GetDesiredSize(widthConstraint, heightConstraint);
+			var result = base.GetDesiredSize(widthConstraint, heightConstraint);
+
+			// UITextView.SizeThatFits (UIScrollView subclass) ignores the height argument
+			// and always returns full content height. Cap the result to the constraint so
+			// GetDesiredSize honours the caller's height limit, but only when height
+			// restriction is active — AutoSize=TextChanges editors must be allowed to grow.
+			if ((VirtualView as IAutoSizeAwareEditor)?.ShouldRestrictHeight == true
+				&& result.Height > heightConstraint)
+			{
+				return new Size(result.Width, heightConstraint);
+			}
+
+			return result;
 		}
 
 		public static void MapText(IEditorHandler handler, IEditor editor)

@MauiBot MauiBot added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-win AI found a better alternative fix than the PR and removed s/agent-approved AI agent recommends approval - PR fix is correct and optimal labels May 6, 2026
@kubaflo kubaflo added the s/agent-gate-failed AI could not verify tests catch the bug label May 20, 2026
PureWeen pushed a commit that referenced this pull request Jun 2, 2026
…acing is applied (#35309)

> [!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!

### Issue Details
On iOS, when an Editor has CharacterSpacing applied through a Slider,
the Editor becomes scrollable once the content exceeds its frame size.
After rotating the device (portrait → landscape → portrait), the Editor
loses scrollability because a re-measurement cascade expands it to the
full content height.

**Regression PR:** #30629
 
### Root Cause
PR #30629 added ValidateSafeArea() to MauiView.LayoutSubviews, which
calls InvalidateConstraintsCache() during rotation. This clears the
measurement cache (_lastMeasuredSize = null), causing HasBeenMeasured()
= false and needsMeasure = true for Pages.
As a result, a full re-measurement cascade occurs, where the Editor is
measured with infinite height. SizeThatFits then returns the full
content height (for example, 134px), causing the Editor to grow to fit
its content and lose its scrollable behavior.
 
### Description of Change
Updated EditorHandler.GetDesiredSize to cap the measured height to the
current frame height when the Editor content exceeds its frame
(scrollable state).
An AllowAutoGrowth flag was added to MauiTextView so Editors using
AutoSize = TextChanges are excluded from the cap and can continue
growing to fit their content.

### Issues Fixed
Fixes #35114

### Screenshots

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/4f1b08f7-abb2-40ae-84d8-f05cd063339c">
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/42850642-087c-4198-91be-fc9b09b8dd43">
|
kubaflo pushed a commit that referenced this pull request Jun 4, 2026
…hen VerticalTextAlignment is Center or End on iOS and MacCatalyst (#35662)

> [!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!

### Issue details

When an Editor with a HeightRequest is placed inside a
VerticalStackLayout on iOS and macOS, setting VerticalTextAlignment to
Center or End causes the Editor to render at the wrong height instead of
the requested size. The Editor appears significantly shorter than
expected, while VerticalTextAlignment.Start renders correctly. This
inconsistency makes it impossible to rely on HeightRequest when using
vertical text alignment on these platforms.

### Root Cause

The issue occurs because of the way UITextView (which is a UIScrollView
subclass) interacts with the handler's height measurement logic. When
VerticalTextAlignment is set to Center or End, the platform view sets a
negative ContentOffset internally to position the text. This negative
offset alters the internal scroll state of the UITextView, causing
SizeThatFits to return a smaller value than expected.
 
The handler uses this value as a substitute for the infinite height
constraint before calling the base size calculation. A cap in the
handler then incorrectly clamps the correctly resolved HeightRequest
value down to this smaller SizeThatFits-derived value, overriding the
developer's intent.

### Description of Change

The fix involves introducing a boolean flag
heightSubstitutedFromSizeThatFits that tracks whether the height
constraint was substituted from a SizeThatFits measurement or from a
real upper bound such as Bounds.Height. When the constraint is a real
bound (used to preserve Editor scrollability after device rotation), the
existing cap is applied as before.
 
When the constraint was derived from SizeThatFits (a content
measurement, not a limit), the flag is set and the cap is skipped,
allowing the base implementation to return the correct size that already
honours HeightRequest via ResolveConstraints. This ensures HeightRequest
is respected across all text alignment combinations without breaking the
existing scrollability behaviour.

### Regression PR

PR #35309

Tested the behavior in the following platforms.
 
- [x] iOS
- [x] Mac
- [ ] Android
- [ ] Windows

### Issues Fixed

Fixes #35615

### Output

|Platform|Before|After|
|--|--|--|
|Mac|<video
src="https://github.com/user-attachments/assets/5cf40c1c-429b-4374-82e4-ca815b364d21">
|<video
src="https://github.com/user-attachments/assets/aa7885b5-e618-45a9-a5b0-599bcc4697bc">|
|iOS|<video
src="https://github.com/user-attachments/assets/5e613e0c-eedd-405c-ae1e-dfa9e60e154b">|<video
src="https://github.com/user-attachments/assets/74b5d0a6-ea11-46ca-a415-eca08b0212b0">|
PureWeen pushed a commit that referenced this pull request Jun 11, 2026
…acing is applied (#35309)

> [!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!

### Issue Details
On iOS, when an Editor has CharacterSpacing applied through a Slider,
the Editor becomes scrollable once the content exceeds its frame size.
After rotating the device (portrait → landscape → portrait), the Editor
loses scrollability because a re-measurement cascade expands it to the
full content height.

**Regression PR:** #30629
 
### Root Cause
PR #30629 added ValidateSafeArea() to MauiView.LayoutSubviews, which
calls InvalidateConstraintsCache() during rotation. This clears the
measurement cache (_lastMeasuredSize = null), causing HasBeenMeasured()
= false and needsMeasure = true for Pages.
As a result, a full re-measurement cascade occurs, where the Editor is
measured with infinite height. SizeThatFits then returns the full
content height (for example, 134px), causing the Editor to grow to fit
its content and lose its scrollable behavior.
 
### Description of Change
Updated EditorHandler.GetDesiredSize to cap the measured height to the
current frame height when the Editor content exceeds its frame
(scrollable state).
An AllowAutoGrowth flag was added to MauiTextView so Editors using
AutoSize = TextChanges are excluded from the cap and can continue
growing to fit their content.

### Issues Fixed
Fixes #35114

### Screenshots

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/4f1b08f7-abb2-40ae-84d8-f05cd063339c">
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/42850642-087c-4198-91be-fc9b09b8dd43">
|
@PureWeen PureWeen modified the milestones: .NET 10 SR7, .NET 10 SR9 Jun 11, 2026
kubaflo pushed a commit that referenced this pull request Jun 15, 2026
…te branch (#35920)

> [!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!

### Issue Details
After PR #35309, the iOS snapshot for
EditorScrollingWhenEnclosedInBorder differs from the baseline by
approximately 1 px vertically. The Border outline, visible text lines,
and scroll thumb endpoints are all shifted by one pixel, causing the
exact-match snapshot comparison to fail.

**Test name:** EditorScrollingWhenEnclosedInBorder
**Cause PR:** #35309
 
### Root Cause
PR #35309 added a final cap in EditorHandler.GetDesiredSize that clamps
result.Height to heightConstraint. PR #35662 narrowed this behavior to
skip the SizeThatFits substitution path, but the cap was still applied
when the caller provided a finite heightConstraint (for example, when
Border measures its child).
base.GetDesiredSize correctly returned the requested size, but the final
cap reduced the calculated height to the Border's stroke-adjusted
constraint, resulting in a 1 px vertical drift.
 
### Description of Change
Added an else branch to the double.IsInfinity(...) check in
GetDesiredSize (iOS) to mark caller-provided finite constraints using
heightSubstitutedFromSizeThatFits = true.
The final height cap now applies only when the height value was
substituted internally, restoring the standard MAUI measure behavior for
caller-provided constraints while preserving the existing behavior.

### Output
| Before Issue Fix | After Issue Fix |
|----------|----------|
| <img width="350" height="110"
src="https://github.com/user-attachments/assets/4f3d5b68-7931-4599-a869-b07c7e3bd521">
| <img width="350" height="110"
src="https://github.com/user-attachments/assets/b3c883a5-0c3d-41bd-8fc6-9d127def72b9">
|
PureWeen pushed a commit that referenced this pull request Jun 22, 2026
…acing is applied (#35309)

> [!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!

### Issue Details
On iOS, when an Editor has CharacterSpacing applied through a Slider,
the Editor becomes scrollable once the content exceeds its frame size.
After rotating the device (portrait → landscape → portrait), the Editor
loses scrollability because a re-measurement cascade expands it to the
full content height.

**Regression PR:** #30629
 
### Root Cause
PR #30629 added ValidateSafeArea() to MauiView.LayoutSubviews, which
calls InvalidateConstraintsCache() during rotation. This clears the
measurement cache (_lastMeasuredSize = null), causing HasBeenMeasured()
= false and needsMeasure = true for Pages.
As a result, a full re-measurement cascade occurs, where the Editor is
measured with infinite height. SizeThatFits then returns the full
content height (for example, 134px), causing the Editor to grow to fit
its content and lose its scrollable behavior.
 
### Description of Change
Updated EditorHandler.GetDesiredSize to cap the measured height to the
current frame height when the Editor content exceeds its frame
(scrollable state).
An AllowAutoGrowth flag was added to MauiTextView so Editors using
AutoSize = TextChanges are excluded from the cap and can continue
growing to fit their content.

### Issues Fixed
Fixes #35114

### Screenshots

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/4f1b08f7-abb2-40ae-84d8-f05cd063339c">
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/42850642-087c-4198-91be-fc9b09b8dd43">
|
kubaflo pushed a commit that referenced this pull request Jun 24, 2026
…llectionViewItems - Editor cells becoming invisible in CollectionView (CV1) (#36107)

<!-- 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

When using an Editor inside a CollectionView with the legacy handler
(CV1) on iOS, the Editor cells collapse and become invisible after the
user taps on them to begin typing.


### Root Cause of the Regression

The issue occurs because of the scrollability cap introduced in
EditorHandler.GetDesiredSize by PR
[#35309](#35309). This cap was added
to prevent Editors from growing unboundedly when AllowAutoGrowth =
false. However, the native layout container assigns a transient
placeholder height of 1pt directly to MauiTextView.Bounds via UIKit,
completely bypassing MAUI's PlatformArrange pipeline. When the keyboard
appears and the layout invalidates, GetDesiredSize is called and the cap
reads Bounds.Height = 1 > 0 and ContentSize.Height = 36 > 1, both true,
so it fires incorrectly, capping every Editor cell to 1pt and making
them invisible.

### Description of Change

The fix involves overriding PlatformArrange in EditorHandler to track
the last MAUI-arranged height in a _lastArrangedHeight field, and using
that value instead of PlatformView.Bounds.Height inside the
scrollability cap condition. Since the native layout container assigns
the placeholder height directly via UIKit without going through
PlatformArrange, _lastArrangedHeight remains 0 until MAUI explicitly
arranges the view.

The cap condition currentHeight > 0 therefore evaluates to false for
placeholder frames, skipping the cap automatically. Once MAUI arranges
the view with a real height, _lastArrangedHeight is updated and the cap
applies correctly for all subsequent measure passes, Editors outside a
CollectionView are completely unaffected.

**Regression PR:** #35309
 
### Issues Fixed

**iOS UI Test:** CV1:
ShouldIgnoreBottomContentInsetForCollectionViewItems
kubaflo pushed a commit that referenced this pull request Jun 25, 2026
…acing is applied (#35309)

> [!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!

### Issue Details
On iOS, when an Editor has CharacterSpacing applied through a Slider,
the Editor becomes scrollable once the content exceeds its frame size.
After rotating the device (portrait → landscape → portrait), the Editor
loses scrollability because a re-measurement cascade expands it to the
full content height.

**Regression PR:** #30629
 
### Root Cause
PR #30629 added ValidateSafeArea() to MauiView.LayoutSubviews, which
calls InvalidateConstraintsCache() during rotation. This clears the
measurement cache (_lastMeasuredSize = null), causing HasBeenMeasured()
= false and needsMeasure = true for Pages.
As a result, a full re-measurement cascade occurs, where the Editor is
measured with infinite height. SizeThatFits then returns the full
content height (for example, 134px), causing the Editor to grow to fit
its content and lose its scrollable behavior.
 
### Description of Change
Updated EditorHandler.GetDesiredSize to cap the measured height to the
current frame height when the Editor content exceeds its frame
(scrollable state).
An AllowAutoGrowth flag was added to MauiTextView so Editors using
AutoSize = TextChanges are excluded from the cap and can continue
growing to fit their content.

### Issues Fixed
Fixes #35114

### Screenshots

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/4f1b08f7-abb2-40ae-84d8-f05cd063339c">
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/42850642-087c-4198-91be-fc9b09b8dd43">
|
kubaflo pushed a commit that referenced this pull request Jul 3, 2026
…acing is applied (#35309)

> [!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!

### Issue Details
On iOS, when an Editor has CharacterSpacing applied through a Slider,
the Editor becomes scrollable once the content exceeds its frame size.
After rotating the device (portrait → landscape → portrait), the Editor
loses scrollability because a re-measurement cascade expands it to the
full content height.

**Regression PR:** #30629
 
### Root Cause
PR #30629 added ValidateSafeArea() to MauiView.LayoutSubviews, which
calls InvalidateConstraintsCache() during rotation. This clears the
measurement cache (_lastMeasuredSize = null), causing HasBeenMeasured()
= false and needsMeasure = true for Pages.
As a result, a full re-measurement cascade occurs, where the Editor is
measured with infinite height. SizeThatFits then returns the full
content height (for example, 134px), causing the Editor to grow to fit
its content and lose its scrollable behavior.
 
### Description of Change
Updated EditorHandler.GetDesiredSize to cap the measured height to the
current frame height when the Editor content exceeds its frame
(scrollable state).
An AllowAutoGrowth flag was added to MauiTextView so Editors using
AutoSize = TextChanges are excluded from the cap and can continue
growing to fit their content.

### Issues Fixed
Fixes #35114

### Screenshots

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/4f1b08f7-abb2-40ae-84d8-f05cd063339c">
| <video width="300" height="600"
src="https://github.com/user-attachments/assets/42850642-087c-4198-91be-fc9b09b8dd43">
|
@PureWeen PureWeen mentioned this pull request Jul 6, 2026
PureWeen added a commit that referenced this pull request Jul 6, 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 153 commits with various improvements,
bug fixes, and enhancements.


## Activityindicator
- [Android] Fix CollectionView ActivityIndicator not animating after
header height change by @Vignesh-SF3580 in
#35358
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView items fail to update ActivityIndicator state after
header height change](#33780)
  </details>

## Animation
- [Android] Fix Shadow property affecting transform matrix. by
@Shalini-Ashokan in #32962
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Applying Shadow property affects the properties in Visual
Transform Matrix](#32731)
  </details>

## API
- Add delegate-based alert dialog extensibility convention (no public
API changes) by @Redth in #35095
  <details>
  <summary>🔧 Fixes</summary>

- [Alert/Dialog system (`DisplayAlert`, `DisplayActionSheet`,
`DisplayPromptAsync`) needs a public extensibility
point](#34104)
  </details>

## Blazor
- [Android] Fix for BlazorWebView predictive back callback blocks
Android back-to-home animation by @BagavathiPerumal in
#35538
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] BlazorWebView predictive back callback blocks Android
back-to-home animation](#35397)
  </details>

- [Android] Fix BlazorWebView back callback can swallow the first Back
press when its callback is stale-enabled by @devanathan-vaithiyanathan
in #35611
  <details>
  <summary>🔧 Fixes</summary>

- [[inflight regression] Android BlazorWebView back callback can swallow
the first Back press when its callback is
stale-enabled](#35573)
  </details>

## Border
- [Windows] Fixed the ContentView clip is not updated when wrapping
inside the Border by @Ahamed-Ali in
#30408
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] ContentView clip is not updated when wrapping inside the
Border](#30404)
  </details>

- Fix Border.StrokeDashArray leaks dashed Borders when using a shared
Application resource by @devanathan-vaithiyanathan in
#35544
  <details>
  <summary>🔧 Fixes</summary>

- [`Border.StrokeDashArray` leaks dashed Borders when using a shared
Application resource](#35492)
  </details>

- [Windows] Border: Add AutomationPeer support by @Vignesh-SF3580 in
#35577
  <details>
  <summary>🔧 Fixes</summary>

- [Adding AutomationPeers to Windows
Borders](#27627)
  </details>

- [Windows] Fixed BoxView improper rendering inside Border by
@Dhivya-SF4094 in #28465
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Issues with BoxView Placement Inside
Border](#19668)
  </details>

## Button
- Prevent NullReferenceException in LayoutButton by @GamesAgeddon in
#35284
  <details>
  <summary>🔧 Fixes</summary>

- [NullReferenceException on iOS in Button.LayoutButton from
WrapperView.LayoutSubviews](#31048)
  </details>

- Fix TextColor null reset to restore platform defaults on iOS and
Android by @Shalini-Ashokan in #35563
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows, Android, iOS & Mac]Button TextColor does not restore to
platform default when reset to null after dynamic
update](#35513)
  </details>

## CollectionView
- Fix CollectionView grid spacing updates for first row and column by
@KarthikRajaKalaimani in #34527
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] I2_Vertical grid for horizontal Item Spacing and Vertical Item
Spacing - horizontally updating the spacing only applies to the second
column](#34257)
  </details>

- [MacCatalyst] Fix CollectionView Header/Footer Not Expanding to
Content Width by @KarthikRajaKalaimani in
#35213
  <details>
  <summary>🔧 Fixes</summary>

- [[MacOS][CV2] I8_View header and footer_Horizontal_View - Footer on
the right doesn't adapt when resizing the
window](#35113)
  </details>

- [iOS/MacCatalyst] Fix IndicatorView not updating when IndicatorSize is
changed to default value by @Shalini-Ashokan in
#35215
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/MacCatalyst] IndicatorView does not update when IndicatorSize is
dynamically changed to the default
value](#35214)
  </details>

- CollectionView selecteditem background lost if collectionview (or
parent) IsEnabled changed. by @KarthikRajaKalaimani in
#31540
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView selecteditem background lost if collectionview (or
parent) IsEnabled changed.](#20615)
  </details>

- [iOS/macOS] CollectionView: Fix FlowDirection not working on EmptyView
by @Dhivya-SF4094 in #32674
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, MacOS] FlowDirection not working on EmptyView in
CollectionView](#32404)
- [[iOS, Mac] CollectionView EmptyViewTemplate content text is mirrored
when FlowDirection is
RightToLeft](#34522)
  </details>

- Fix iOS CollectionView stale layout invalidations by @filipnavara in
#35245
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] CollectionView tries to invalidate cells with invalid
indexes](#35244)
  </details>

- Fix Android grouped CollectionView header/footer rebind leak by
@AdamEssenmacher in #35368
  <details>
  <summary>🔧 Fixes</summary>

- [Memory leak when scrolling a CollectionView with
IsGrouped=true](#17698)
  </details>

- [Windows] Fix for Item should scrolled based on the
GroupHeaderTemplate by @SuthiYuvaraj in
#28074
  <details>
  <summary>🔧 Fixes</summary>

- [I9_Scroll by object for grouped data - The group name is always pined
at the top after clicking 'Scroll to Proboscis Monkey'
button](#27922)
  </details>

- [Android] Fix ScrollTo regression when IsGrouped true on
CollectionView by @SubhikshaSf4851 in
#35356
  <details>
  <summary>🔧 Fixes</summary>

- [[10.0.60] ScrollTo(0) not working anymore on CollectionView when
IsGrouped="True"](#35313)
  </details>

- [Android] Fix CollectionView scrolling performance regression by
@devanathan-vaithiyanathan in #35379
  <details>
  <summary>🔧 Fixes</summary>

- [[10.0.60] CollectionView scrolling performance
regression](#35344)
  </details>

- Optimize parent dynamic resource refresh by @AdamEssenmacher in
#35408
  <details>
  <summary>🔧 Fixes</summary>

- [Memory usage increases when scrolling collectionview if resources
count is more than 191](#22053)
  </details>

- Fix CI failure for CollectionView Scrolling Feature Tests due to PR
#35379 by @devanathan-vaithiyanathan in
#35536

- [iOS & Mac] CarouselViewController2 leaks on iOS/MacCatalyst due to
unremoved orientation notification observer by @SubhikshaSf4851 in
#35532
  <details>
  <summary>🔧 Fixes</summary>

- [CarouselViewController2 leaks on iOS/MacCatalyst due to unremoved
orientation notification
observer](#35472)
  </details>

- Fix CollectionView.SelectedItems leaks popped views when bound to a
retained ObservableCollection by @HarishwaranVijayakumar in
#35558
  <details>
  <summary>🔧 Fixes</summary>

- [`CollectionView.SelectedItems` leaks popped views when bound to a
retained
`ObservableCollection`](#35497)
  </details>

- Fix for Android - Dynamic Updates to CollectionView Header/Footer and
Templates Are Not Displayed by @SuthiYuvaraj in
#28904
  <details>
  <summary>🔧 Fixes</summary>

- [Android - Dynamic Updates to CollectionView Header/Footer and
Templates Are Not
Displayed](#28676)
  </details>

- [Windows] Fix CarouselView EmptyView display when filtering to zero
items by @Shalini-Ashokan in #29247
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] [Scenario Day] EmptyView using Template displayed at the
same time as the content](#7150)
  </details>

- [Android/iOS] Fix IsEnabled=False on CollectionView not working by
@devanathan-vaithiyanathan in #27749
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/Android] CollectionView IsEnabled Not
Working](#27770)
  </details>

- Fix CarouselView.Loop property does not update dynamically and fails
to maintain the scroll position when the loop value is changed at
runtime by @devanathan-vaithiyanathan in
#29527
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CarouselView.Loop = false causes crash on Android when
changed at runtime](#29411)
- [Loop Binding in CarouselView Not Updating Dynamically at
Runtime](#29449)
  </details>

- [iOS / Mac] Fix CollectionView.ScrollTo(index) silently failing
whenIsGrouped="True" by @Dhivya-SF4094 in
#35609
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView.ScrollTo(index) doesn't work correctly when
IsGrouped="True" on iOS, MacCatalyst, and
Windows](#35326)
  </details>

- Fix Android nested carousel scrolling by @AdamEssenmacher in
#35656
  <details>
  <summary>🔧 Fixes</summary>

- [Vertical scrolling not working for CarouselView and
CustomLayouts](#7814)
  </details>

- [Inflight regression] Fixed Test failures
ModalTabbedPagePushAsyncShouldOverlayBottomNavigationView and
GroupedCollectionViewScrollToIndexScrollsToCorrectItem by @Dhivya-SF4094
in #35823

- Fix CarouselView tests fail in June 8 Candidate by
@devanathan-vaithiyanathan in #35825

## Core
- Reduce allocations on AnimationManager by @pictos in
#35612
  <details>
  <summary>🔧 Fixes</summary>

- [AnimationManager is allocating a
lot](#35654)
  </details>

## Core Lifecycle
- Fix device test memory by @pictos in
#35487
  <details>
  <summary>🔧 Fixes</summary>

- [Memory leak Device.Test pass with false
positive](#35485)
  </details>

## Datepicker
- Fix MacCatalyst DatePicker focus handling by @AdamEssenmacher in
#35553
  <details>
  <summary>🔧 Fixes</summary>

- [[mauipalooza] DatePicker focus only works first
time](#5947)
  </details>

## DateTimePicker
- [Android] Fix DatePicker dialog dismisses after the device is rotated
by @HarishwaranVijayakumar in #34980
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] [Regression] DatePicker dialog dismisses after the device
is rotated](#34973)
  </details>

## Docs
- doc: Add paragraph to README.md explaining how to fetch the `maui`
project templates by @durandt in
#34561

## Drawing
- [Android] Fix LinearGradientBrush rendering as opaque black box by
@SubhikshaSf4851 in #35299
  <details>
  <summary>🔧 Fixes</summary>

- [[Regression] LinearGradientBrush broken on Android in
10.0.60](#35280)
- [10.0.60 breaks transparency on Brushes (on
Android?)](#35354)
  </details>

- Fix polygon points collection handler leak by @AdamEssenmacher in
#35526
  <details>
  <summary>🔧 Fixes</summary>

- [PolygonHandler and PolylineHandler leak when Points is replaced
before disconnect](#35387)
  </details>

## Editor
- [iOS] Fix Editor losing scrollability after rotation when
CharacterSpacing is applied by @Vignesh-SF3580 in
#35309
  <details>
  <summary>🔧 Fixes</summary>

- [[.NET 10][iOS] D2 - Editor can't be scrolled after rotating
simulator.](#35114)
  </details>

- [Inflight/Candidate][iOS & Mac] Fix for Editor height inconsistency
when VerticalTextAlignment is Center or End on iOS and MacCatalyst by
@BagavathiPerumal in #35662
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] D13_Customize_Text_Alignment - Text Editor Height is not
consistent](#35615)
  </details>

## Entry
- [iOS/Mac] Fix Entry clear button retaining tint color after TextColor
is reset to null by @SyedAbdulAzeemSF4852 in
#35177
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/Mac]Entry ClearButtonVisibility color does not reset when
TextColor is set to null](#35076)
  </details>

- [iOS/MacCatalyst] Fix Entry clear button appearing dimmed compared to
TextColor by @SyedAbdulAzeemSF4852 in
#35541
  <details>
  <summary>🔧 Fixes</summary>

- [[MacCatalyst] [Entry] ClearButtonVisibility color appears dimmed
compared to TextColor](#35517)
  </details>

- Fix pill-shaped focus ring on macOS 26 by @Dhivya-SF4094 in
#35393
  <details>
  <summary>🔧 Fixes</summary>

- [.Net 10 Picker item not centered and wrong focus outline of Entry on
Mac](#34899)
  </details>

- Fix Entry select all text on refocus not working on WinUI by @kubaflo
in #35383

## Essentials
- [Android] Fix Capture video crashes after stopping recording on
Android 12 by @HarishwaranVijayakumar in
#35638
  <details>
  <summary>🔧 Fixes</summary>

- [Capture video crashes after stopping recording on Android
12](#28891)
  </details>

- [Essentials] Browser.OpenAsync(External): drop visibility-filtered
ResolveActivity pre-check by @Kebechet in
#35652
  <details>
  <summary>🔧 Fixes</summary>

- [Browser.OpenAsync(External) on Android throws
FeatureNotSupportedException for verified App Link owner URLs even with
documented <queries> fix
applied](#35651)
  </details>

## Essentials Texttospeech
- [Mac, iOS, Windows] Fix for inconsistent Text-to-Speech rate behavior
by @HarishwaranVijayakumar in #32850
  <details>
  <summary>🔧 Fixes</summary>

  - [[Essentials] TTS rate](#32492)
  </details>

## Flyoutpage
- [iOS/Mac] Fix FlyoutPage RTL FlowDirection is not working by
@devanathan-vaithiyanathan in #34831
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/Mac] FlyoutPage RTL FlowDirection is not working
properly](#34830)
  </details>

- [Android] Fix for Android 16 Back button is not working after command
from FlyoutPage by @BagavathiPerumal in
#35196
  <details>
  <summary>🔧 Fixes</summary>

- [Android: BackButton on Android 16 not working after command from
FlyOutPage](#33508)
  </details>

## Gestures
- Fix DragGestureRecognizer.DropCompleted event not firing in Android
platform by @KarthikRajaKalaimani in
#35179
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] DragGestureRecognizer.DropCompleted event not
firing](#17554)
  </details>

- Windows: Ensure layouts without background participate in hit testing
by @jpd21122012 in #34364
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] TapGestureRecognizer does NOT work on a ContentView without
Background](#32279)
  </details>

- [iOS] Fix VoiceOver dropping child labels on layouts with
SemanticProperties.Hint or TapGestureRecognizer by @Vignesh-SF3580 in
#35590
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] VoiceOver does not correctly describe View with
GestureRecognizers](#34380)
  </details>

## Hybridwebview
- Fix RemovePossibleQueryString to also strip URL fragments by @kubaflo
in #35551
  <details>
  <summary>🔧 Fixes</summary>

- [HybridWebViewQueryStringHelper.RemovePossibleQueryString removes '?'
but not other special characters e.g.
'#'](#31472)
  </details>

- [Revert] - [Windows] Fix WebView blank rendering when used with
HybridWebView by @SubhikshaSf4851 in
#35814

## Image
- Avoid image source layout invalidation for fixed-size views by
@AdamEssenmacher in #35369
  <details>
  <summary>🔧 Fixes</summary>

- [Image source swaps thrash layout under fixed constraints, tanking
frame rate when scrolling virtualized
collections](#32457)
  </details>

- [Windows] Fix Image layout inconsistency caused by async decode race
in GetDesiredSize by @praveenkumarkarunanithi in
#34699
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Image cropping produces inconsistent results when window is
minimized or resized](#32393)
  </details>

- [Testing] Include more testing around Windows Image Aspect recent
fixes by @kubaflo in #35620
  <details>
  <summary>🔧 Fixes</summary>

- [[Testing] Include more testing around Windows Image Aspect recent
fixes](#31686)
  </details>

- Revert PR #30068 — Fix FontImageSource centering regression on Windows
by @Shalini-Ashokan in #35642
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Image with FontImageSource is not centered and gets clipped
when WidthRequest/HeightRequest equals FontImageSource
Size](#35618)
  </details>

- [Android] Fix screenshot from WebView content not working by @kubaflo
in #35384
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Loading the captured screenshot from webview content to
Image control does not
visible](#30010)
  </details>

## Label
- Improve label mapping performance and ensure complete coverage
including ToPlatform and subsequent property changes by
@Tamilarasan-Paranthaman in #31159

- Fix for Label.FormattedText leaks labels when shared FormattedString
is stored in Application.Resources by @BagavathiPerumal in
#35582
  <details>
  <summary>🔧 Fixes</summary>

- [`Label.FormattedText` leaks labels when shared `FormattedString` is
stored in
`Application.Resources`](#35495)
  </details>

- [iOS] Fix Label Span formatting test failures on candidate branch by
@Vignesh-SF3580 in #35815

## Layout
- [iOS, Mac] Fix Item spacing not properly applied between items in
Horizontal LinearItemsLayout by @Dhivya-SF4094 in
#35445
  <details>
  <summary>🔧 Fixes</summary>

- [[CollectionView2] Item spacing not properly applied between items in
Horizontal
LinearItemsLayout](#35429)
  </details>

- [Windows] Add Automation Id support for Layouts. by @SubhikshaSf4851
in #35562
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] AutomationId does not work for ContentView, Layouts and
controls that inherit them](#4715)
  </details>

- Avoid layout diagnostics allocations without listeners by
@AdamEssenmacher in #35475
  <details>
  <summary>🔧 Fixes</summary>

- [MAUI 10 layout diagnostics no-consumer path is not
zero-allocation](#35473)
  </details>

- [Windows/Android] FlexLayout: Fix wrap misalignment due to
floating-point precision by @SuthiYuvaraj in
#31341
  <details>
  <summary>🔧 Fixes</summary>

- [FlexLayout Wrap Misalignment with Dynamically-Sized Buttons in .NET
MAUI](#30957)
  </details>

## Listview
- Fix Binding for ListView.IsRefreshing by @bill2004158 in
#28516
  <details>
  <summary>🔧 Fixes</summary>

- [Bind ListView.IsRefreshing is not
work.](#28514)
  </details>

## Map
- Fix iOS/Catalyst MapPool retention with MapElements by
@AdamEssenmacher in #35480
  <details>
  <summary>🔧 Fixes</summary>

- [iOS/Mac Catalyst MapHandler leaks MAUI Map views and MapElements
through MapPool](#35479)
  </details>

- Fix Android map view lifecycle cleanup by @AdamEssenmacher in
#35476
  <details>
  <summary>🔧 Fixes</summary>

- [Navigating to a page with Maps multiple times Increase RAM Usage but
doesn't reduce it back after navigating
back](#15257)
  </details>

- Fix Android map element options retention by @AdamEssenmacher in
#35634
  <details>
  <summary>🔧 Fixes</summary>

- [[Regression] [Android] [Maps] Map locks up after rendering 50
Polylines](#20502)
  </details>

## Menubar
- [MacCatalyst] Fix KeyboardAccelerator with Cmd+Shift modifiers breaks
entire MenuBarItem on Mac Catalyst by @KarthikRajaKalaimani in
#35318
  <details>
  <summary>🔧 Fixes</summary>

- [[Bug] KeyboardAccelerator with Cmd+Shift modifiers breaks entire
MenuBarItem on Mac
Catalyst](#35279)
  </details>

## Navigation
- [iOS, Mac] Fix OnBackButtonPressed not invoked for NavigationPage and
Shell by @Dhivya-SF4094 in #35072
  <details>
  <summary>🔧 Fixes</summary>

- [On Screen Back Button Does Not Fire OnBackButtonPressed in
Android](#9095)
- [ContentPage's OnBackButtonPressed not invoked on iOS and
MacCatalyst](#8296)
  </details>

- Fix Android stale ContainerView root leak by @AdamEssenmacher in
#35372
  <details>
  <summary>🔧 Fixes</summary>

- [Android: Stale ContainerView retains replaced FlyoutPage
graph](#35371)
  </details>

- [Android] Fix for predictive back-to-home animation blocked by
unconditional back callback registration by @BagavathiPerumal in
#35223
  <details>
  <summary>🔧 Fixes</summary>

- [OnBackInvokedCallbacks block back-to-home
animation](#34594)
- [Migrate to
OnBackPressedCallback](#24752)
  </details>

- Revert [Android, iOS] - Flyout icon should remain visible when a page
is pushed onto a NavigationPage or Shell page with the back button
disabled. by @praveenkumarkarunanithi in
#35604

## Picker
- [iOS] Fix Picker CharacterSpacing lost after item selection when Title
is set by @SyedAbdulAzeemSF4852 in
#34974
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Picker loses CharacterSpacing after item selection when Title
is set](#34971)
  </details>

- [iOS] Fix Picker CharacterSpacing ignored on initial load by
@SyedAbdulAzeemSF4852 in #34957
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Picker ignores CharacterSpacing on initial
load](#34955)
  </details>

- [Windows] Fix for Picker CharacterSpacing Not Being Applied to Title
and Dropdown Items by @SyedAbdulAzeemSF4852 in
#30612
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Picker CharacterSpacing property not applied to Title and
PickerItems text](#30464)
  </details>

- Fix Picker SelectedIndex deferred initialization by @AdamEssenmacher
in #35629
  <details>
  <summary>🔧 Fixes</summary>

- [Picker Attribute "SelectedIndex" Not being respected on page load on
Android?](#9150)
  </details>

## Progressbar
- Fix iOS ProgressBar bounding box by @AdamEssenmacher in
#35507
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] ProgressBar and Label don't correctly obey height and width at
the core level](#7935)
  </details>

## RadioButton
- [Windows, Android] Fix Border Color and Border Width Not applying for
Radio Button by @HarishwaranVijayakumar in
#35616
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows, Android] Border Color and Border Width Not applying for
Radio Button.](#35587)
  </details>

- [inflight/current] Fixes a CS0111 build failure in RadioButton.cs
caused by a duplicate OnPropertyChanged override by
@HarishwaranVijayakumar in #35631

- Revert - Fix TalkBack not correctly narrating RadioButtons with
Content by @devanathan-vaithiyanathan in
#35625
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] MissingMethodException
AccessibilityNodeInfoCompat.set_Checked(bool) on 10.0.70 due to
AndroidX.Core 1.17 breaking
change](#35584)
  </details>

## Refreshview
- [Windows] Fix RefreshView IsRefreshing property not working while
binding by @devanathan-vaithiyanathan in
#34845
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] RefreshView IsRefreshing property not working while
binding](#30535)
  </details>

- [Android] Fix for RefreshView triggering pull-to-refresh when
scrolling inside a WebView with internal scrollable content by
@BagavathiPerumal in #34614
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] RefreshView triggers pull-to-refresh immediately when
scrolling up inside a
WebView](#33510)
  </details>

## SafeArea
- [Android] Fix bottom safe area padding dropping to zero when keyboard
is shown by @praveenkumarkarunanithi in
#35084
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Bottom insets issues when keyboard is
shown.](#32871)
  </details>

- Gate SafeArea inset listeners in recycler items by @AdamEssenmacher in
#35664
  <details>
  <summary>🔧 Fixes</summary>

- [[10.0.60] CollectionView scrolling performance
regression](#35344)
  </details>

## ScrollView
- [Windows] Fix COMException when restoring a ScrollView as
ContentPage.Content after swapping it out by @Vignesh-SF3580 in
#35360
  <details>
  <summary>🔧 Fixes</summary>

- [COMException when clone a page's content to a object and set it back
later in mainthread on
Windows](#35277)
  </details>

- Fix - ScrollView.ScrollToAsync(x, y, animated) doesn't work when
called from Page.OnAppearing by @Shalini-Ashokan in
#35395
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] ScrollView.ScrollToAsync(x, y, animated) doesn't work when
called from
Page.OnAppearing](#31177)
  </details>

## Searchbar
- [Android] Fix SearchBar IME full-screen extract mode in landscape
orientation by @SubhikshaSf4851 in
#35197
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Investigate SearchBar presentation in horizontal screen
orientation ](#14708)
  </details>

- [iOS 26] Fix SearchBar layout spacing issues for small HeightRequest
values by @devanathan-vaithiyanathan in
#35347
  <details>
  <summary>🔧 Fixes</summary>

- [Spacing problem with maui 10.0.60
iOS](#35286)
  </details>

## SearchBar
- [Windows] Fix SearchHandler does not focus when ShowSoftInputAsync is
called by @praveenkumarkarunanithi in
#35079
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] SearchHandler.ShowSoftInputAsync() does not focus the
SearchHandler](#34930)
  </details>

## Shell
- Fix Android layout jump when navigating with IME open and
NavBarIsVisible=false by @jpd21122012 in
#34621
  <details>
  <summary>🔧 Fixes</summary>

- [Shell page without NavBar jumping when navigating with keyboard
open](#34584)
  </details>

- [Android] Add defensive not null check to
SearchHandlerAppearanceTracker.FocusChange by @Transis-Felipe in
#29939

- [Android] Fix for Shell colors change before navigation completes on
Android in .NET 10 by @BagavathiPerumal in
#35295
  <details>
  <summary>🔧 Fixes</summary>

- [Shell colors change before navigation completes on Android in .NET
10](#35060)
  </details>

- [Windows] Fix Shell FlyoutItem not taking full width by
@SubhikshaSf4851 in #35131
  <details>
  <summary>🔧 Fixes</summary>

- [MAUI WinUI Grids don't render properly in flyout
menu](#19542)
- [[Windows] [.NET 8 RC2] FlyoutItem Backgroundcolor Is not fully
displaying](#18238)
  </details>

- [Android, iOS, Catalyst] Fix SearchHandler.BackgroundColor cannot be
reset to null by @HarishwaranVijayakumar in
#35224
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, iOS, Catalyst] SearchHandler.BackgroundColor cannot be
reset to null](#35088)
  </details>

- Fix for ApplyQueryAttributes being called on non-destination pages
during back navigation by @BagavathiPerumal in
#35392
  <details>
  <summary>🔧 Fixes</summary>

- [ApplyQueryAttributes gets called for not activated (navigated to)
page on back](#35183)
  </details>

- [Android] Fix Shell flyout background to follow Material 3 theme
colors by @SyedAbdulAzeemSF4852 in
#35148
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell Flyout ignores Material 3 surface color when
UseMaterial3 is enabled](#35147)
  </details>

- [Android] Fix Shell.FlyoutHeader background incorrect by
@SyedAbdulAzeemSF4852 in #35489
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell.FlyoutHeader background is
incorrect](#35416)
  </details>

- [iOS/MacCatalyst] Fix Shell.BackgroundColor not applied to bottom
TabBar by @Shalini-Ashokan in #35545
  <details>
  <summary>🔧 Fixes</summary>

- [[MacCatalyst] Shell.BackgroundColor not applied to bottom
TabBar](#35380)
- [[Catalyst] Shell.TabBarBackgroundColor is not
applied](#35381)
  </details>

- [Android] Fix Shell FlyoutIcon tint loss after navigation by
@SyedAbdulAzeemSF4852 in #35561
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] The flyout icon loses
colours](#35390)
  </details>

- [iOS] Fix Shell - opened keyboard on modal page shifts parent
page/frame behind modal after update to 10.0.60 by @KarthikRajaKalaimani
in #35559
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Shell - opened keyboard on modal page shifts parent page/frame
behind modal after update to
10.0.60](#35401)
  </details>

- Fix intermediate pages not receiving query parameters in multi-page
Shell navigation by @mattleibow in
#35432
  <details>
  <summary>🔧 Fixes</summary>

- [Shell GoToAsync: no way to pass query parameters to intermediate
pages in multi-segment
navigation](#35107)
  </details>

- [Windows] Fix Shell title bar overlap with window controls in RTL mode
by @Shalini-Ashokan in #33109
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Binding RTL FlowDirection in Shell causes Flyout MenuIcon
and native window controls to
overlap](#32476)
  </details>

- [macOS] Fix IsEnabled property false not working on MenuBarItem by
@devanathan-vaithiyanathan in #35546
  <details>
  <summary>🔧 Fixes</summary>

- [[macOS] IsEnabled property false not working on
MenuBarItem](#34038)
  </details>

- Fix Android Shell top inset when nav bar is hidden by @ne0rrmatrix in
#35555
  <details>
  <summary>🔧 Fixes</summary>

- [wrong statusbar height when Android device has a
notch](#35103)
  </details>

- Fix Changing Content property of ShellContent doesn't change visual
content by @devanathan-vaithiyanathan in
#34630
  <details>
  <summary>🔧 Fixes</summary>

- [Changing Content property of ShellContent doesn't change visual
content. ](#12669)
  </details>

- Fixed a NullReferenceException when starting application with empty
shell on Windows by @Shalini-Ashokan in
#28879
  <details>
  <summary>🔧 Fixes</summary>

- [NullReferenceException when starting application with empty shell on
Windows](#21562)
- [Using SelectionChangedCommand with CollectionView in
Shell.FlyoutContent results in Win32 Unhandled
Exception](#10041)
  </details>

## Slider
- [iOS] Slider: Scale ThumbImageSource to match default thumb size by
@NirmalKumarYuvaraj in #34184
  <details>
  <summary>🔧 Fixes</summary>

- [[Slider] MAUI Slider thumb image is big on
android](#13258)
  </details>

## Stepper
- Fix iOS 26 Stepper overlap in landscape by @AdamEssenmacher in
#35374
  <details>
  <summary>🔧 Fixes</summary>

- [[.NET10] D10-The number and buttons overlap after rotating the
simulator.](#35211)
  </details>

## SwipeView
- Fix SwipeViews with invoked properties crash the app in Release mode
by @BagavathiPerumal in #35208
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/Catalyst] Swipeviews with invoked properties crash the app in
Release](#18055)
  </details>

- Fix SwipeItemView command leak by @AdamEssenmacher in
#35510
  <details>
  <summary>🔧 Fixes</summary>

- [`SwipeItemView.Command` leaks row views and command parameters
through
`CanExecuteChanged`](#35498)
  </details>

- [iOS/Android] Fix SwipeItem.IsVisible not refreshing native swipe
items when binding changes by @SyedAbdulAzeemSF4852 in
#35217
  <details>
  <summary>🔧 Fixes</summary>

- [SwipeItem.IsVisible doesn't properly refresh the native swipe items
when the binding value changes
dynamically](#34832)
  </details>

- Fix SwipeView memory leak when SwipeItems are reused or replaced by
@Vignesh-SF3580 in #35539
  <details>
  <summary>🔧 Fixes</summary>

- [SwipeView leaks when SwipeItems are reused or
replaced](#35481)
  </details>

- Fix SwipeItem IconImageSource color handling and rendering across
platforms by @Shalini-Ashokan in
#35632
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] SwipeItem IconImageSource should allow more
configuration](#23074)
  </details>

## Switch
- [Android/Windows] Fix RadioButton gradient not clearing when switching
background by @Shalini-Ashokan in
#34997
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButton Background does not reset when set to null at
runtime](#34993)
  </details>

- [Windows] Fix "PlatformView cannot be null here" exception during
handler disconnect by @kubaflo in
#35314
  <details>
  <summary>🔧 Fixes</summary>

- ["PlatformView cannot be null here" Exception in Switch control
[Windows]](#27101)
  </details>

- [iOS 26] Fix Switch ThumbColor and OffColor not applied on initial
load by @SyedAbdulAzeemSF4852 in
#35400
  <details>
  <summary>🔧 Fixes</summary>

- [iOS 26 Switch default color for Off and On is incorrect + Off Color
is not applied at start + Thumb Colors is not
applied](#35257)
  </details>

- [Android] Fix AppBar flicker on CheckBox/Switch toggle with Material 3
by @Dhivya-SF4094 in #35181
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] AppBar flicker while changing the CheckBox or Switch state
after scrolling in Material
3](#35180)
  </details>

- [Android] Fix Switch Shadow Does Not Follow Thumb when Toggle On or
Off by @Dhivya-SF4094 in #35623
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Switch Shadow Does Not Follow Thumb when Toggle On or
Off](#30046)
  </details>

## TabbedPage
- [Android] Fix TabbedPage truncating tab titles instead of scrolling by
@Shalini-Ashokan in #35086
  <details>
  <summary>🔧 Fixes</summary>

- [Maui migrating Xamarin to Maui - Tabbed Page Scroll Issue - Tabs are
not scrolling](#16470)
  </details>

- [Android] Fix BottomNavigationView remaining visible for TabbedPage
inside modal NavigationPage after PushAsync by @Dhivya-SF4094 in
#35359
  <details>
  <summary>🔧 Fixes</summary>

- [Android TabbedPage inside Modal Navigation does not overlay
BottomNavigationView after PushAsync in .NET MAUI
10.0.60](#35331)
  </details>

- [Android & iOS] TabbedPage leaks with shared GradientBrush. by
@SubhikshaSf4851 in #35543
  <details>
  <summary>🔧 Fixes</summary>

- [TabbedPage leaks renderer/manager when BarBackground uses shared
GradientBrush resource](#35469)
  </details>

## Templates
- Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.10 by
@PaulAndersonS in #35608

## Toolbar
- Fix Android app bar inset background coloring by @ne0rrmatrix in
#35601
  <details>
  <summary>🔧 Fixes</summary>

- [Android Edge-to-Edge: Shell and NavigationPage Top Bar colour is not
used for status bar.](#35568)
  </details>

## Tooling
- Add default .gitignore to MAUI project templates by @davidortinau in
#34862
  <details>
  <summary>🔧 Fixes</summary>

- [Add a gitignore file to the Maui template in VS
2022](#4131)
  </details>

- Fix: Propagate AdditionalProperties from ProjectReference in
ResizetizeCollectItems by @mattleibow in
#35575
  <details>
  <summary>🔧 Fixes</summary>

- [Resizetizer GetMauiItems does not propagate ProjectReference
AdditionalProperties](#35574)
  </details>

## WebView
- [Windows] Fix WebView blank rendering when used with HybridWebView by
@SubhikshaSf4851 in #35092
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] WebView Regression from NET9 to
NET10](#34558)
  </details>

- Fix AOT integration test failures: suppress IL3050/IL2026 for
HybridWebViewHandler in AddControlsHandlers by @mattleibow via @Copilot
in #34868

- Fix Android activity result callback leak by @AdamEssenmacher in
#35436
  <details>
  <summary>🔧 Fixes</summary>

- [Android WebView file chooser callbacks leak via
ActivityResultCallbackRegistry](#35405)
  </details>

- [Windows] Fix WebView Does Not Inherit App Theme by
@devanathan-vaithiyanathan in #35037
  <details>
  <summary>🔧 Fixes</summary>

- [WebView on Windows Does Not Inherit App
Theme](#34823)
  </details>

- Fix for WebView leaks when reusing a shared WebViewSource by
@BagavathiPerumal in #35524
  <details>
  <summary>🔧 Fixes</summary>

- [WebView leaks when reusing a shared
WebViewSource](#35483)
  </details>

- Destroy Android WebView on handler disconnect by @AdamEssenmacher in
#35552
  <details>
  <summary>🔧 Fixes</summary>

- [Right way to dispose page with
WebView](#18021)
  </details>

## Xaml
- Fix: Enable VisualStateManager to set Style property dynamically by
@Shalini-Ashokan in #33389
  <details>
  <summary>🔧 Fixes</summary>

- [Setting the `Style` property using the `VisualStateManager` within a
Style resource does not
work](#17175)
  </details>

- Fix Implicit parameter conversion from integer to byte fails with
source generated XAML by @KarthikRajaKalaimani in
#35444
  <details>
  <summary>🔧 Fixes</summary>

- [Implicit parameter conversion from integer to byte fails with source
generated XAML](#35396)
  </details>


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

- Fix: Build fails when appicon is an empty (but valid) SVG by
@Shalini-Ashokan in #35305
  <details>
  <summary>🔧 Fixes</summary>

- [Build fails when appicon is an empty (but valid) svg after upgrade to
10.0.60](#35293)
  </details>
- [inflight/current] Fix CS0111 duplicate GetNativeCharacterSpacing in
PickerHandlerTests.iOS by @SyedAbdulAzeemSF4852 in
#35419
- Update WinAppSDK to 1.8.260508005 by @kubaflo in
#35678

</details>

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

- Backport Test Fixes and Snapshots from SR to Inflight Branch by
@Tamilarasan-Paranthaman in #35499
- Fix hardcoded version of Microsoft.DotNet.XHarness.TestRunners.Xunit
in test projects by @akoeplinger in
#29905
- [Testing] Fixed Build error on inflight/ candidate PR 35716 by
@HarishKumarSF4517 in #35730

</details>

<details>
<summary>🏠 Housekeeping (1)</summary>

- [HouseKeeping] Fix inconsistant namespace in HostApp by
@NirmalKumarYuvaraj in #35210

</details>

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

- Add .cab and ReconnectModal.razor.js to signing config by @jesuszarate
in #35026
- Fix typo in Clipboard.shared.cs by @Deadpikle in
#35316
- Fix single modifier for NSMenuItem accelerators by @jeremy-visionaid
in #35351
- Avoid unnecessary LINQ enumerations by @jeremy-visionaid in
#35272
- [Testing] Replace retryDelay with retryTimeout in UI tests by @kubaflo
in #35367
- Replace JavaFinalize() with Dispose(bool) in GenericAnimatorListener
by @jonathanpeppers in #35548
- Fix incorrect SDK provisioning commands in integration-tests
instructions by @davidnguyen-tech in
#34992
- Fix VisualElement.ChangeVisualState() gets stuck in Selected state by
@Dhivya-SF4094 in #35421
  <details>
  <summary>🔧 Fixes</summary>

- [VisualElement's ChangeVisualState gets stuck in Selected
state](#35399)
  </details>

</details>

<details>
<summary>📝 Issue References</summary>

Fixes #4131, Fixes #4715, Fixes #5947, Fixes #7150, Fixes #7814, Fixes
#7935, Fixes #8296, Fixes #9095, Fixes #9150, Fixes #10041, Fixes
#12669, Fixes #13258, Fixes #14708, Fixes #15257, Fixes #16470, Fixes
#17175, Fixes #17554, Fixes #17698, Fixes #18021, Fixes #18055, Fixes
#18238, Fixes #19542, Fixes #19668, Fixes #20502, Fixes #20615, Fixes
#21562, Fixes #22053, Fixes #23074, Fixes #24752, Fixes #27101, Fixes
#27627, Fixes #27770, Fixes #27922, Fixes #28514, Fixes #28676, Fixes
#28891, Fixes #29411, Fixes #29449, Fixes #30010, Fixes #30046, Fixes
#30404, Fixes #30464, Fixes #30535, Fixes #30957, Fixes #31048, Fixes
#31177, Fixes #31472, Fixes #31686, Fixes #32279, Fixes #32393, Fixes
#32404, Fixes #32457, Fixes #32476, Fixes #32492, Fixes #32731, Fixes
#32871, Fixes #33508, Fixes #33510, Fixes #33780, Fixes #34038, Fixes
#34104, Fixes #34257, Fixes #34380, Fixes #34522, Fixes #34558, Fixes
#34584, Fixes #34594, Fixes #34823, Fixes #34830, Fixes #34832, Fixes
#34899, Fixes #34930, Fixes #34955, Fixes #34971, Fixes #34973, Fixes
#34993, Fixes #35060, Fixes #35076, Fixes #35088, Fixes #35103, Fixes
#35107, Fixes #35113, Fixes #35114, Fixes #35147, Fixes #35180, Fixes
#35183, Fixes #35211, Fixes #35214, Fixes #35244, Fixes #35257, Fixes
#35277, Fixes #35279, Fixes #35280, Fixes #35286, Fixes #35293, Fixes
#35313, Fixes #35326, Fixes #35331, Fixes #35344, Fixes #35354, Fixes
#35371, Fixes #35380, Fixes #35381, Fixes #35387, Fixes #35390, Fixes
#35396, Fixes #35397, Fixes #35399, Fixes #35401, Fixes #35405, Fixes
#35416, Fixes #35429, Fixes #35469, Fixes #35472, Fixes #35473, Fixes
#35479, Fixes #35481, Fixes #35483, Fixes #35485, Fixes #35492, Fixes
#35495, Fixes #35497, Fixes #35498, Fixes #35513, Fixes #35517, Fixes
#35568, Fixes #35573, Fixes #35574, Fixes #35584, Fixes #35587, Fixes
#35615, Fixes #35618, Fixes #35651, Fixes #35654

</details>


**Full Changelog**:
main...inflight/candidate
@kubaflo kubaflo mentioned this pull request Jul 6, 2026
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 12, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-editor Editor community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/ios s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-win AI found a better alternative fix than the PR s/agent-gate-failed AI could not verify tests catch the bug 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.

[.NET 10][iOS] D2 - Editor can't be scrolled after rotating simulator.

7 participants