You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR documents and reproduces an iOS-specific inconsistency with RefreshView hosting a CollectionView when iOS Large Page Titles are enabled.
When the RefreshView has no Refreshing event handler set which resets IsRefreshing:
With ios:Page.LargeTitleDisplay="Never": the pull-to-refresh loading indicator can remain visible indefinitely.
With ios:Page.LargeTitleDisplay="Always": the indicator shows graphical glitches, then disappears, but the vertical space reserved for the indicator remains (layout stays “pushed down”).
All behaviors are captured using the artifact from #32081.
On iOS, pull down to trigger the refresh indicator.
Observed results
LargeTitleDisplay=Never + no handler: indicator can spin forever.
LargeTitleDisplay=Always + no handler: indicator glitches, then disappears, but reserved space remains.
Expected result
Missing Refreshing handler should not produce different visual/layout behavior depending on large title mode. If refresh cannot complete, behavior should be consistent (and ideally not leave the UI in a broken layout state).
(I used the linked reproduction repo from a different issue to create the uploaded videos)
iOS 26 & 26.1 and maybe older ones that support LargeTitles
Did you find any workaround?
Use one of the following patterns to ensure the refresh completes deterministically:
Always handle Refreshing and reset refresh state
privatevoidRefreshView_OnRefreshing(objectsender,EventArgse){try{// Do refresh work (async if needed)}finally{((RefreshView)sender).IsRefreshing=false;}}
Bind IsRefreshing to a VM property and set it back to false when done
(Ensure IsRefreshing is set back to false after the command completes.)
Provide Command / CommandParameter instead of relying on the event
(Same idea: ensure the refresh completion clears the refresh state.)
I also have this problem with my production app where I use a workaround to enable LargeTitles and have a command connected to the RefreshView which resets IsRefreshing but still has these graphical glitches - though I couldn't reliably reproduce this
Description
This PR documents and reproduces an iOS-specific inconsistency with
RefreshViewhosting aCollectionViewwhen iOS Large Page Titles are enabled.When the
RefreshViewhas noRefreshingevent handler set which resetsIsRefreshing:ios:Page.LargeTitleDisplay="Never": the pull-to-refresh loading indicator can remain visible indefinitely.ios:Page.LargeTitleDisplay="Always": the indicator shows graphical glitches, then disappears, but the vertical space reserved for the indicator remains (layout stays “pushed down”).All behaviors are captured using the artifact from #32081.
NotLargeTitle_ResetIsRefreshing.mov
NotLargeTitle_NotResetIsRefreshing.mov
LargeTitle_ResetIsRefreshing.mov
LargeTitle_NotResetIsRefreshing.mov
Steps to Reproduce
Create a page with a
RefreshViewcontaining aCollectionView.Toggle the page large title mode using:
ios:Page.LargeTitleDisplay="Never"orios:Page.LargeTitleDisplay="Always"Run two variants:
Variant A (with handler):
Variant B (no handler):
<RefreshView ...>On iOS, pull down to trigger the refresh indicator.
Observed results
Never+ no handler: indicator can spin forever.Always+ no handler: indicator glitches, then disappears, but reserved space remains.Expected result
Refreshinghandler should not produce different visual/layout behavior depending on large title mode. If refresh cannot complete, behavior should be consistent (and ideally not leave the UI in a broken layout state).(I used the linked reproduction repo from a different issue to create the uploaded videos)
Link to public reproduction project repository
https://github.com/paulober/maui-largetitles-bug
Version with bug
Unknown/Other
Is this a regression from previous behavior?
Not sure, did not test other versions
Last version that worked well
No response
Affected platforms
iOS
Affected platform versions
iOS 26 & 26.1 and maybe older ones that support LargeTitles
Did you find any workaround?
Use one of the following patterns to ensure the refresh completes deterministically:
Always handle
Refreshingand reset refresh stateBind
IsRefreshingto a VM property and set it back tofalsewhen done(Ensure
IsRefreshingis set back tofalseafter the command completes.)Provide
Command/CommandParameterinstead of relying on the event(Same idea: ensure the refresh completion clears the refresh state.)