Skip to content

TabbedPage crashes on iPadOS 26.1 with windowed applications in narrow viewports #32661

@Emtiaz-Tafsir

Description

@Emtiaz-Tafsir

Description

When a .NET MAUI application initializes a TabbedPage with its default handler (Handlers.Compatibility.TabbedRenderer) in a windowed application with a width of 667 points or less on iPadOS 26.1, the application crashes with a null reference exception deep within the framework code. When the window width exceeds 667 points, the TabbedPage and its contents load and display properly.

Width < 667 (Non-working Scenario) Image Image
Width > 667 (Working Scenario) Image Image

Stack Trace

at Microsoft.Maui.Controls.Handlers.Compatibility.TabbedRenderer.get_Element()
at Microsoft.Maui.Controls.Handlers.Compatibility.TabbedRenderer.ViewDidLayoutSubviews()
at ObjCRuntime.Messaging.IntPtr_objc_msgSendSuper(IntPtr receiver, IntPtr selector)
at UIKit.UITabBarController..ctor()
at Microsoft.Maui.Controls.Handlers.Compatibility.TabbedRenderer..ctor()
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
at System.RuntimeType.CreateInstanceMono(Boolean nonPublic, Boolean wrapExceptions)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type, Boolean nonPublic)
at System.Activator.CreateInstance(Type type)
at Microsoft.Maui.Hosting.Internal.MauiFactory.CreateInstance(ServiceDescriptor item)
at Microsoft.Maui.Hosting.Internal.MauiFactory.GetService(Type serviceType)
at Microsoft.Maui.Hosting.Internal.MauiHandlersFactory.GetHandler(Type type)
at Microsoft.Maui.Platform.ElementExtensions.ToHandler(IElement view, IMauiContext context)
at Microsoft.Maui.Platform.ElementExtensions.ToPlatform(IElement view, IMauiContext context)
at Microsoft.Maui.Controls.Handlers.Compatibility.NavigationRenderer.CreateViewControllerForPage(Page page)
at Microsoft.Maui.Controls.Handlers.Compatibility.NavigationRenderer.<OnPushAsync>d__60.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Maui.Controls.Handlers.Compatibility.NavigationRenderer.OnPushAsync(Page page, Boolean animated)
at Microsoft.Maui.Controls.Handlers.Compatibility.NavigationRenderer.PushPageAsync(Page page, Boolean animated)
at Microsoft.Maui.Controls.Handlers.Compatibility.NavigationRenderer.OnPushRequested(Object sender, NavigationRequestedEventArgs e)
at Microsoft.Maui.Controls.NavigationPage.<PushAsyncInner>d__136.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Maui.Controls.NavigationPage.PushAsyncInner(Page page, Boolean animated)
at Microsoft.Maui.Controls.NavigationPage.<PushAsync>d__67.MoveNext()
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Maui.Controls.NavigationPage.PushAsync(Page page, Boolean animated)
at Microsoft.Maui.Controls.NavigationPage.NavigationImpl.OnPushAsync(Page root, Boolean animated)
at Microsoft.Maui.Controls.Internals.NavigationProxy.PushAsync(Page root, Boolean animated)
at Microsoft.Maui.Controls.Internals.NavigationProxy.PushAsync(Page root)
at MauiWindowingTest.IntermPageViewModel.<>c.<.ctor>b__17_0() in C:\REDACTED\MauiWindowingTest\IntermPage.xaml.cs:line 47
at Microsoft.Maui.Controls.Command.<>c__DisplayClass4_0.<.ctor>b__0(Object o)
at Microsoft.Maui.Controls.Command.Execute(Object parameter)
at Microsoft.Maui.Controls.ButtonElement.ElementClicked(VisualElement visualElement, IButtonElement ButtonElementManager)
at Microsoft.Maui.Controls.Button.SendClicked()
at Microsoft.Maui.Controls.Button.Microsoft.Maui.IButton.Clicked()
at Microsoft.Maui.Handlers.ButtonHandler.ButtonEventProxy.OnButtonTouchUpInside(Object sender, EventArgs e)
at UIKit.UIControlEventProxy.Activated()
at UIKit.UIApplication.xamarin_UIApplicationMain(Int32 argc, IntPtr argv, IntPtr principalClassName, IntPtr delegateClassName, IntPtr* gchandle)
at UIKit.UIApplication.UIApplicationMain(Int32 argc, String[] argv, IntPtr principalClassName, IntPtr delegateClassName)
at UIKit.UIApplication.Main(String[] args, Type principalClass, Type delegateClass)
at MauiWindowingTest.Program.Main(String[] args) in C:\REDACTED\MauiWindowingTest\Platforms\iOS\Program.cs:line 13

Although the exception appears to be managed code, the problem is occurring on the native side during instantiation of UITabBarController, likely related to how tab controls handle the compact style/size class in narrow viewports. The exception cannot be caught on the managed side—the application simply stops responding or crashes altogether.

Basic Information

  • Version with issue: Microsoft.Maui.Controls 10.0.10 (Also tested with 10.0.0 & 9.0.120, same result), iPadOS 26.1
  • Last known good version: iPadOS < 26.1 (works correctly)
  • IDE: Visual Studio 2026 with Mac pair
  • Tested on:
    • iPad Pro 11-inch (M4) - simulator ❌
    • iPad Air 13-inch (M3) - simulator ❌
    • iPad mini (A17 Pro) - simulator ❌
    • iPad Pro 11-inch (3rd Gen) - device ❌

Additional Context

  • The issue does not occur with the obsolete compatibility TabbedRenderer (Compatibility.Platform.iOS)
  • The issue does not occur with iPadOS versions < 26.1
  • The issue is specific to the Handlers.Compatibility.TabbedRenderer implementation

Steps to Reproduce

  1. Create a tabbed page with some contents
  2. Add it to your application (either as MainPage or as a NavigationPage item)
  3. Run the application on an iPadOS 26.1 device or simulator
  4. Resize the app window to be less than 667 points in width (Enable Windowed Apps/Stage Manager if not already enabled)
  5. Navigate to the tabbed page

Expected Outcome: The TabbedPage contents should load and display correctly regardless of the window width.
Actual Outcome: The application becomes unresponsive or crashes with a null reference exception.

Link to public reproduction project repository

https://github.com/Emtiaz-Tafsir/Maui-WindowedTabbedPage-Repro/tree/main

Version with bug

10.0.10

Is this a regression from previous behavior?

Yes, this used to work in .NET MAUI

Last version that worked well

Unknown/Other

Affected platforms

iOS

Affected platform versions

iPadOS 26.1/26.2

Did you find any workaround?

Currently, there is no confirmed workaround. However, the following may help:

  • Avoid using TabbedPage in applications that support windowing on iPadOS 26.1
  • Use larger window sizes (> 667 points) if possible
  • Use the older compatibility renderer [deprecated]

Relevant log output

Metadata

Metadata

Assignees

Labels

area-controls-tabbedpageTabbedPagep/0Current heighest priority issues that we are targeting for a release.platform/ioss/triagedIssue has been revieweds/verifiedVerified / Reproducible Issue ready for Engineering Triaget/bugSomething isn't workingversion/iOS-26

Type

No type

Projects

Status

Done

Relationships

None yet

Development

No branches or pull requests

Issue actions