Unified iOS TabbedViewHandler
Unified iOS TabbedViewHandler
Target: .NET 10
Goal
Implement TabbedViewHandler for iOS, replacing the legacy TabbedRenderer. Learn from both the existing TabbedRenderer implementation and Shell's tab handling to build a unified handler that both TabbedPage and Shell can use.
Background
- WinUI already has a shared tab handling approach
- iOS currently uses
TabbedRenderer(inMicrosoft.Maui.Controls.Handlers.Compatibility) TabbedViewHandlerexists but throwsNotImplementedExceptionon iOS (see issue #29540)- Shell has its own tab bar implementation that duplicates much of the same logic
Rollout Strategy
-
Implement
TabbedViewHandlerfor .NET 10 -
Gate behind AppContext switch - Wire TabbedPage to use the new handler when the switch is enabled
-
Switch disabled by default initially - Allows testing and validation without affecting existing apps
-
Enable for TabbedPage and Shell - Once validated, flip the switch to make it the default path
Guidelines
-
Implement
TabbedViewHandler.CreatePlatformView()on iOS - Currently throws NotImplementedException -
Learn from
TabbedRenderer- Extract the best patterns for UITabBarController management, tab icons, selected/unselected colors -
Learn from Shell tab handling - Incorporate patterns that work well for Shell's tab bar
-
TabbedPage and Shell both use it - Same handler, different consumers
-
Keep handler internal initially - Flexibility to iterate without public API commitment
-
Align with WinUI patterns - Use WinUI's unified approach as the reference model
Success Criteria
TabbedViewHandlerworks on iOS (no more NotImplementedException)- TabbedPage uses the new handler (when switch enabled)
- Shell can use the same handler for tabs (when switch enabled)
- All existing TabbedPage tests pass with switch enabled
- All existing Shell tab tests pass with switch enabled