Skip to content

Comments

Fix to Improve Flyout Accessibility by Adjusting UITableViewController Labels#31619

Merged
PureWeen merged 8 commits intodotnet:inflight/currentfrom
SuthiYuvaraj:fix-accessibility
Jan 9, 2026
Merged

Fix to Improve Flyout Accessibility by Adjusting UITableViewController Labels#31619
PureWeen merged 8 commits intodotnet:inflight/currentfrom
SuthiYuvaraj:fix-accessibility

Conversation

@SuthiYuvaraj
Copy link
Contributor

@SuthiYuvaraj SuthiYuvaraj commented Sep 15, 2025

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 Description:

The Shell Flyout is implemented using a UITableViewController with a UITableView, which iOS accessibility services announce as a "table".

Description of Change:

Entirely hides the UITableView Accessibility and makes the UIContainerCell to become a first responder, The inner UIContainerCell cannot be individually detected — it is treated as a single grouped element.

Issues Fixed

Fixes #30894

Tested the behaviour in the following platforms

  • Android
  • Windows
  • iOS
  • Mac

Output Screenshot

Before Issue Fix After Issue Fix
BeforeFixAccess.mov
AfterFixAccess.mov

@dotnet-policy-service dotnet-policy-service bot added community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration labels Sep 15, 2025
@SuthiYuvaraj SuthiYuvaraj marked this pull request as ready for review September 15, 2025 14:26
@SuthiYuvaraj SuthiYuvaraj requested a review from a team as a code owner September 15, 2025 14:26
Copilot AI review requested due to automatic review settings September 15, 2025 14:26
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR improves accessibility for the Shell Flyout by addressing iOS VoiceOver announcing the flyout as a generic "table" instead of providing meaningful navigation context. The changes add semantic properties to flyout navigation items and configure proper accessibility traits for the underlying UITableViewController.

  • Adds semantic properties (Description and Hint) to ShellContent items in the app template
  • Configures accessibility traits and labels for the Shell flyout's UITableViewController
  • Enhances button accessibility traits for flyout cells

Reviewed Changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
src/Templates/src/templates/maui-mobile/AppShell.xaml Adds SemanticProperties.Description and SemanticProperties.Hint to ShellContent navigation items
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/UIContainerCell.cs Enhances accessibility by setting button traits on both platform view and cell
src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellTableViewController.cs Configures flyout-specific accessibility properties for the UITableView

@jsuarezruiz
Copy link
Contributor

/azp run MAUI-UITests-public

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Member

@PureWeen PureWeen left a comment

Choose a reason for hiding this comment

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

I wonder about the issue described here

#16245

it seems like something changed with maui from forms

I don't think we want to hardcode the values here for this

@PureWeen PureWeen added this to the .NET 10.0 GA milestone Oct 10, 2025
@PureWeen PureWeen moved this from Todo to Changes Requested in MAUI SDK Ongoing Oct 10, 2025
@PureWeen PureWeen added the p/0 Current heighest priority issues that we are targeting for a release. label Oct 10, 2025

TableView.AccessibilityTraits = UIAccessibilityTrait.None;

TableView.AccessibilityLabel = "Navigation Flyout Menu";
Copy link
Member

Choose a reason for hiding this comment

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

Should this be localized by using resources?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Hi @rmarinho ,I’ve updated the code with localization so the accessibility labels now read correctly in VoiceOver using language-specific strings. Please review and let me know if you have any concerns.

@PureWeen PureWeen modified the milestones: .NET 10.0 GA, .NET 10 SR1 Oct 13, 2025
@SuthiYuvaraj
Copy link
Contributor Author

SuthiYuvaraj commented Oct 16, 2025

@PureWeen , The reported accessibility issue #30894 is different from the previously mentioned issue #16245. This fix specifically addresses a problem where the screen reader reads the entire Shell Flyout view as a “table.” To resolve this, we set the appropriate accessibility properties within the ShellTableViewController, as these properties cannot be configured from the application side for the Shell Flyout. Additionally, we ensure that the SemanticProperties are correctly updated for each Shell Flyout item as navigation occurs between items.

Issue #16245 will be addressed separately.

Copy link
Member

@PureWeen PureWeen left a comment

Choose a reason for hiding this comment

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

@SuthiYuvaraj

i think the main thing we want here is for the keyboard navigation to just go directly to the items vs the keyboard navigation highlighting the entire table

I'll probably push back on the reporters suggestion that it needs to not read as a table.

Like, if you use the accessibility inspector on the settings menu on mac it reports as a "Column"

but when you navigate to it it just goes to the first item.

I don't think we care about setting any labels for the table itself, we just want the table to be invisible

@PureWeen
Copy link
Member

/rebase

@jsuarezruiz
Copy link
Contributor

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@SuthiYuvaraj
Copy link
Contributor Author

@SuthiYuvaraj

i think the main thing we want here is for the keyboard navigation to just go directly to the items vs the keyboard navigation highlighting the entire table

I'll probably push back on the reporters suggestion that it needs to not read as a table.

Like, if you use the accessibility inspector on the settings menu on mac it reports as a "Column"

but when you navigate to it it just goes to the first item.

I don't think we care about setting any labels for the table itself, we just want the table to be invisible

@PureWeen , I’ve disabled the UITableView by setting its AccessibilityElementHidden to true, which hides the entire table and its children from accessibility. Then, by calling BecomeFirstResponder() on the UIContainerCell, the child element can be selected directly through accessibility. Kindly check and let me know if you have any concerns.

@PureWeen
Copy link
Member

/rebase

@jsuarezruiz
Copy link
Contributor

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

TableView.ContentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.Never;
}

TableView.AccessibilityElementsHidden = true;
Copy link
Contributor

Choose a reason for hiding this comment

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

This change hides ALL children of the TableView from VoiceOver, expected behavior?

@PureWeen PureWeen added this to the .NET 10.0 SR2 milestone Nov 12, 2025
@PureWeen PureWeen modified the milestones: .NET 10.0 SR2, .NET 10.0 SR3 Dec 3, 2025
@kubaflo
Copy link
Contributor

kubaflo commented Dec 13, 2025

Review Feedback: PR #31619 - Fix to Improve Flyout Accessibility

Recommendation

Approve with Suggestions

Recommended changes (non-blocking):

  1. Add automated UI test to validate accessibility fix and prevent regression
  2. Consider testing on older iOS versions (iOS 14-15) to ensure UIAccessibilityContainerType.None behaves consistently
  3. Document the accessibility fix approach in XML comments for future maintainers

📋 Full PR Review Details

Summary

This PR fixes a critical accessibility issue (#30894) where the Shell Flyout on iOS/MacCatalyst is announced by screen readers as a "table" instead of a navigation menu. The fix replaces the default UITableView with a custom AccessibilityNeutralTableView that sets UIAccessibilityContainerType.None, preventing the container from being announced as a table while keeping individual flyout items accessible. Additionally, the PR enhances the template with semantic properties for better navigation hints.

Code Review

The Problem (Root Cause Analysis)

ShellTableViewController uses a UITableView to render flyout items because UITableView provides built-in scrolling, cell reuse, and section management. However, iOS accessibility correctly identifies this as a UITableView container and announces it as "table" to screen reader users. This is confusing because users expect a navigation menu, not a table.

Why This Fix Is Correct

The PR takes the right approach for several reasons:

  1. UIAccessibilityContainerType.None is the proper solution: This iOS API specifically addresses this exact scenario - a container that should be transparent to accessibility. Setting it to None tells VoiceOver "don't announce this container's semantic type, just let children be accessible."

  2. Proper UIKit lifecycle: Overriding LoadView() is the correct place to replace the view. This happens before ViewDidLoad(), ensuring the custom table view is in place before any configuration (separator style, content inset, source assignment) happens.

  3. Minimal implementation: The AccessibilityNeutralTableView class does exactly one thing - sets the container type. It doesn't try to override accessibility behavior in multiple ways or hide elements. This is clean and focused.

  4. Evolution through feedback: The commit history shows the PR went through iterations:

    • ❌ First attempt: Set AccessibilityLabel, AccessibilityHint, AccessibilityValue - still announced as "table"
    • ❌ Second attempt: AccessibilityElementsHidden = true - hid ALL children (broke navigation)
    • ✅ Final: UIAccessibilityContainerType.None - perfect balance
  5. Template improvements are valuable: Adding SemanticProperties.Description and SemanticProperties.Hint to ShellContent items in the template is best practice and helps developers learn proper accessibility patterns.

Code Quality Assessment

Strengths:

  • ✅ Focused, surgical change - doesn't modify unrelated code
  • ✅ Platform-specific code properly isolated (iOS/MacCatalyst only)
  • ✅ No performance impact (one-time view replacement)
  • ✅ No breaking changes to public API surface
  • ✅ Follows UIKit best practices for view lifecycle

Potential concerns addressed:

  • Thread safety: Not a concern - LoadView() is called on main thread by UIKit
  • Memory management: No retain cycles - simple subclass with no captured state
  • Backward compatibility: UIAccessibilityContainerType available since iOS 11, and the code already has iOS 11 version checks elsewhere
  • TvOS: The file includes TvOS version checks, and this change should work there too

PublicAPI Changes

PublicAPI entries are correct:

override Microsoft.Maui.Controls.Platform.Compatibility.ShellTableViewController.LoadView() -> void
  • Entry added to both net-ios and net-maccatalyst PublicAPI files (appropriate)
  • Signature is accurate - LoadView() is a public override from UIViewController
  • Method needs to be public (inherited from UIKit base class)
  • No analyzer suppression needed - entries are properly formatted

Test Coverage

⚠️ This PR does not include automated UI tests.

Why this is a concern:

  • Accessibility regressions are easy to introduce and hard to catch without automation
  • Future refactoring of ShellTableViewController could accidentally remove this fix
  • No way to verify the fix works across iOS versions without manual testing

What a test would look like:

A UI test should:

  1. Launch app with Shell Flyout
  2. Use iOS accessibility APIs to query the flyout container
  3. Assert that AccessibilityContainerType == UIAccessibilityContainerType.None
  4. Assert that individual flyout items ARE still accessible
  5. Optionally: Use UI Automation to navigate with VoiceOver gestures

Mitigation: The issue (#30894) is marked with a11y/sf-template-app label, suggesting it may be validated through manual accessibility testing of the Syncfusion template app. However, automated regression protection would be valuable.

Manual Testing Evidence

The PR includes video evidence showing:

  • ✅ VoiceOver no longer announces "table" when navigating flyout
  • ✅ Individual flyout items are still announced and navigable
  • ✅ Tested on macOS 26.0.1 with VoiceOver

The contributor responded to maintainer questions with additional testing, showing iterative validation.

Edge Cases Analysis

Tested implicitly (likely works):

  1. ✅ Custom flyout items (ShellContent with different properties)
  2. ✅ Multiple flyout items navigation
  3. ✅ Flyout open/close

Not explicitly tested (should verify):

  1. ⚠️ Custom FlyoutHeader with complex controls
  2. ⚠️ Custom FlyoutContent replacing default TableView
  3. ⚠️ Dynamic addition/removal of flyout items at runtime
  4. ⚠️ Nested Shell structures (FlyoutItem → Tab → ShellContent)
  5. ⚠️ iOS 14-15 behavior (contributor tested iOS 26/macOS 26.1)
  6. ⚠️ TvOS with focus engine

Risk assessment: Low - these edge cases would likely work because:

  • The fix only changes the container type, not the structure
  • Individual cells/items are still managed by existing code
  • Custom headers/content would be children of different containers

Template Changes Analysis

<ShellContent
    Title="Dashboard"
    Icon="{StaticResource IconDashboard}"
    ContentTemplate="{DataTemplate pages:MainPage}"
    Route="main"
    SemanticProperties.Description="Dashboard"
    SemanticProperties.Hint="Navigate to dashboard"/>

These changes are good practice:

  • SemanticProperties.Description - Tells screen readers "what this is"
  • SemanticProperties.Hint - Tells screen readers "how to use it"
  • Applied consistently to all three ShellContent items in template

⚠️ Minor observation: The descriptions duplicate the Title. Better might be:

  • Description="Dashboard section" (adds context)
  • Hint="Double-tap to view dashboard" (more specific action)

But current implementation is acceptable and follows common patterns.

Security & Privacy

✅ No security concerns - purely UI accessibility fix

Issues Found

None (Must Fix)

No critical issues found. The implementation is sound.

Suggestions (Non-blocking)

  1. Add XML documentation to the nested class:

    /// <summary>
    /// Custom UITableView that prevents VoiceOver from announcing the flyout as a table.
    /// Sets AccessibilityContainerType to None so individual flyout items remain accessible
    /// without the container being identified as a table structure.
    /// </summary>
    internal class AccessibilityNeutralTableView : UITableView, IUIAccessibilityContainer
  2. Consider adding a UI test for regression protection (see Test Coverage section)

  3. Consider testing on iOS 14-15 to ensure consistent behavior across supported versions

Approval Checklist

  • Code solves the stated problem
  • Minimal, focused changes
  • Platform-specific code properly isolated
  • No security concerns
  • Follows .NET MAUI conventions
  • PublicAPI changes are correct
  • No breaking changes
  • Adequate automated test coverage (recommended but not blocking)

Final Assessment

This is a well-executed fix that solves a real accessibility problem. The approach is correct, the implementation is clean, and the PR shows good iteration based on maintainer feedback. The contributor clearly understands both the problem domain (iOS accessibility) and the solution space (UIAccessibilityContainerType).

The only gap is lack of automated testing, but given the difficulty of testing VoiceOver behavior programmatically and the existence of manual validation, this is acceptable for merge. Future work could add accessibility assertions if .NET MAUI adds testing infrastructure for iOS accessibility APIs.

Recommendation: Approve and merge. This improves accessibility for all .NET MAUI apps using Shell on iOS/MacCatalyst.

Review Metadata


Summary for Maintainers

TL;DR: This PR correctly fixes the accessibility issue using UIAccessibilityContainerType.None. The implementation is clean, focused, and follows iOS best practices. Manual testing confirms it works. Only gap is lack of automated tests, but this is acceptable given the testing complexity for VoiceOver behavior. Recommend approve and merge.

Key points:

  • ✅ Solves the reported problem (flyout announced as "table")
  • ✅ Correct iOS accessibility API usage
  • ✅ Minimal, surgical change
  • ✅ No breaking changes
  • ⚠️ No automated tests (manual validation provided)
  • ✅ Template improvements follow best practices

@github-project-automation github-project-automation bot moved this from Ready To Review to Approved in MAUI SDK Ongoing Jan 9, 2026
@PureWeen PureWeen changed the base branch from main to inflight/current January 9, 2026 21:28
@PureWeen PureWeen merged commit dc0e038 into dotnet:inflight/current Jan 9, 2026
155 of 163 checks passed
@github-project-automation github-project-automation bot moved this from Approved to Done in MAUI SDK Ongoing Jan 9, 2026
PureWeen pushed a commit that referenced this pull request Jan 9, 2026
…r Labels (#31619)

<!-- 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 Description:
The Shell Flyout is implemented using a `UITableViewController` with a
`UITableView`, which iOS accessibility services announce as a "table".

### Description of Change:
Entirely hides the UITableView Accessibility and makes the
UIContainerCell to become a first responder, The inner UIContainerCell
cannot be individually detected — it is treated as a single grouped
element.

### Issues Fixed
Fixes #30894

### Tested the behaviour in the following platforms
- [ ] Android
- [ ] Windows
- [ ] iOS
- [x] Mac

### Output Screenshot
Before Issue Fix | After Issue Fix |
|----------|----------|
|<video width="300" height="150" alt="Before Fix"
src="https://github.com/user-attachments/assets/1862862a-ffee-4302-a46f-5ac083e39a0b">|<video
width="300" height="150" alt="After Fix" src
="https://github.com/user-attachments/assets/be969437-d5ea-4319-ac19-9b60bd0e1a68">|
PureWeen pushed a commit that referenced this pull request Jan 13, 2026
…r Labels (#31619)

<!-- 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 Description:
The Shell Flyout is implemented using a `UITableViewController` with a
`UITableView`, which iOS accessibility services announce as a "table".

### Description of Change:
Entirely hides the UITableView Accessibility and makes the
UIContainerCell to become a first responder, The inner UIContainerCell
cannot be individually detected — it is treated as a single grouped
element.

### Issues Fixed
Fixes #30894

### Tested the behaviour in the following platforms
- [ ] Android
- [ ] Windows
- [ ] iOS
- [x] Mac

### Output Screenshot
Before Issue Fix | After Issue Fix |
|----------|----------|
|<video width="300" height="150" alt="Before Fix"
src="https://github.com/user-attachments/assets/1862862a-ffee-4302-a46f-5ac083e39a0b">|<video
width="300" height="150" alt="After Fix" src
="https://github.com/user-attachments/assets/be969437-d5ea-4319-ac19-9b60bd0e1a68">|
github-actions bot pushed a commit that referenced this pull request Jan 16, 2026
…r Labels (#31619)

<!-- 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 Description:
The Shell Flyout is implemented using a `UITableViewController` with a
`UITableView`, which iOS accessibility services announce as a "table".

### Description of Change:
Entirely hides the UITableView Accessibility and makes the
UIContainerCell to become a first responder, The inner UIContainerCell
cannot be individually detected — it is treated as a single grouped
element.

### Issues Fixed
Fixes #30894

### Tested the behaviour in the following platforms
- [ ] Android
- [ ] Windows
- [ ] iOS
- [x] Mac

### Output Screenshot
Before Issue Fix | After Issue Fix |
|----------|----------|
|<video width="300" height="150" alt="Before Fix"
src="https://github.com/user-attachments/assets/1862862a-ffee-4302-a46f-5ac083e39a0b">|<video
width="300" height="150" alt="After Fix" src
="https://github.com/user-attachments/assets/be969437-d5ea-4319-ac19-9b60bd0e1a68">|
github-actions bot pushed a commit that referenced this pull request Jan 20, 2026
…r Labels (#31619)

<!-- 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 Description:
The Shell Flyout is implemented using a `UITableViewController` with a
`UITableView`, which iOS accessibility services announce as a "table".

### Description of Change:
Entirely hides the UITableView Accessibility and makes the
UIContainerCell to become a first responder, The inner UIContainerCell
cannot be individually detected — it is treated as a single grouped
element.

### Issues Fixed
Fixes #30894

### Tested the behaviour in the following platforms
- [ ] Android
- [ ] Windows
- [ ] iOS
- [x] Mac

### Output Screenshot
Before Issue Fix | After Issue Fix |
|----------|----------|
|<video width="300" height="150" alt="Before Fix"
src="https://github.com/user-attachments/assets/1862862a-ffee-4302-a46f-5ac083e39a0b">|<video
width="300" height="150" alt="After Fix" src
="https://github.com/user-attachments/assets/be969437-d5ea-4319-ac19-9b60bd0e1a68">|
github-actions bot pushed a commit that referenced this pull request Jan 21, 2026
…r Labels (#31619)

<!-- 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 Description:
The Shell Flyout is implemented using a `UITableViewController` with a
`UITableView`, which iOS accessibility services announce as a "table".

### Description of Change:
Entirely hides the UITableView Accessibility and makes the
UIContainerCell to become a first responder, The inner UIContainerCell
cannot be individually detected — it is treated as a single grouped
element.

### Issues Fixed
Fixes #30894

### Tested the behaviour in the following platforms
- [ ] Android
- [ ] Windows
- [ ] iOS
- [x] Mac

### Output Screenshot
Before Issue Fix | After Issue Fix |
|----------|----------|
|<video width="300" height="150" alt="Before Fix"
src="https://github.com/user-attachments/assets/1862862a-ffee-4302-a46f-5ac083e39a0b">|<video
width="300" height="150" alt="After Fix" src
="https://github.com/user-attachments/assets/be969437-d5ea-4319-ac19-9b60bd0e1a68">|
github-actions bot pushed a commit that referenced this pull request Jan 23, 2026
…r Labels (#31619)

<!-- 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 Description:
The Shell Flyout is implemented using a `UITableViewController` with a
`UITableView`, which iOS accessibility services announce as a "table".

### Description of Change:
Entirely hides the UITableView Accessibility and makes the
UIContainerCell to become a first responder, The inner UIContainerCell
cannot be individually detected — it is treated as a single grouped
element.

### Issues Fixed
Fixes #30894

### Tested the behaviour in the following platforms
- [ ] Android
- [ ] Windows
- [ ] iOS
- [x] Mac

### Output Screenshot
Before Issue Fix | After Issue Fix |
|----------|----------|
|<video width="300" height="150" alt="Before Fix"
src="https://github.com/user-attachments/assets/1862862a-ffee-4302-a46f-5ac083e39a0b">|<video
width="300" height="150" alt="After Fix" src
="https://github.com/user-attachments/assets/be969437-d5ea-4319-ac19-9b60bd0e1a68">|
PureWeen pushed a commit that referenced this pull request Jan 23, 2026
…r Labels (#31619)

<!-- 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 Description:
The Shell Flyout is implemented using a `UITableViewController` with a
`UITableView`, which iOS accessibility services announce as a "table".

### Description of Change:
Entirely hides the UITableView Accessibility and makes the
UIContainerCell to become a first responder, The inner UIContainerCell
cannot be individually detected — it is treated as a single grouped
element.

### Issues Fixed
Fixes #30894

### Tested the behaviour in the following platforms
- [ ] Android
- [ ] Windows
- [ ] iOS
- [x] Mac

### Output Screenshot
Before Issue Fix | After Issue Fix |
|----------|----------|
|<video width="300" height="150" alt="Before Fix"
src="https://github.com/user-attachments/assets/1862862a-ffee-4302-a46f-5ac083e39a0b">|<video
width="300" height="150" alt="After Fix" src
="https://github.com/user-attachments/assets/be969437-d5ea-4319-ac19-9b60bd0e1a68">|
PureWeen added a commit that referenced this pull request Jan 25, 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 16 commits with various improvements,
bug fixes, and enhancements.


## Checkbox
- [Android] Implement material3 support for CheckBox by
@HarishwaranVijayakumar in #33339
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for
CheckBox](#33338)
  </details>

## CollectionView
- [Android] Fixed EmptyView doesn’t display when CollectionView is
placed inside a VerticalStackLayout by @NanthiniMahalingam in
#33134
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView does not show an EmptyView template with an empty
collection](#32932)
  </details>

## Essentials
- [Windows]Fix NullReferenceException in OpenReadAsync for FileResult
created with full path by @devanathan-vaithiyanathan in
#28238
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] FileResult(string fullPath) not initialized
properly](#26858)
  </details>

## Image
- Fix Glide IllegalArgumentException in MauiCustomTarget.clear() for
destroyed activities by @jfversluis via @Copilot in
#29780
  <details>
  <summary>🔧 Fixes</summary>

- [java.lang.IllegalArgumentException: You cannot start a load for a
destroyed activity - glide](#29699)
  </details>

## Label
- [Android] Fix for Label WordWrap width issue causing HorizontalOptions
misalignment by @praveenkumarkarunanithi in
#33281
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Unexpected Line Breaks in Android, Label with WordWrap Mode
Due to Trailing Space.](#31782)
- [Label not sized correctly on
Android](#27614)
  </details>

- Fix to Improve Flyout Accessibility by Adjusting UITableViewController
Labels by @SuthiYuvaraj in #31619
  <details>
  <summary>🔧 Fixes</summary>

- [Navigation section present under hamburger are programmatically
define as table :A11y_.NET maui_User can get all the insights of
Dashboard_Devtools](#30894)
  </details>

## Mediapicker
- [Regression][iOS] Fix MediaPicker PickPhotosAsync getting file name in
contentType property by @devanathan-vaithiyanathan in
#33390
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] MediaPicker PickPhotosAsync getting file name in contentType
property](#33348)
  </details>

## Navigation
- Fix handler not disconnected when removing non visible pages using
RemovePage() by @Vignesh-SF3580 in
#32289
  <details>
  <summary>🔧 Fixes</summary>

- [NavigationPage.Navigation.RemovePage() fails to disconnect handlers
when removing pages, unlike
ContentPage.Navigation.RemovePage()](#32239)
  </details>

## Picker
- [Android] Fix Picker IsOpen not reset when picker is dismissed by
@devanathan-vaithiyanathan in #33332
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Picker IsOpen not reset when picker is
dismissed](#33331)
  </details>

## Shell
- [iOS & Catalyst ] Fixed IsEnabled property should work on Tabs by
@SubhikshaSf4851 in #33369
  <details>
  <summary>🔧 Fixes</summary>

- [[Catalyst] TabBarBackgroundColor, TabBarUnselectedColor, and
IsEnabled Not Working as Expected in
Shell](#33158)
  </details>

- [iOS,Windows] Fix navigation bar colors not resetting when switching
ShellContent by @Vignesh-SF3580 in
#33228
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Windows] Shell Navigation bar colors are not updated correctly
when switching
ShellContent](#33227)
  </details>

- [iOS] Fixed Shell navigation on search handler suggestion selection by
@SubhikshaSf4851 in #33406
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Clicking on search suggestions fails to navigate to detail page
correctly](#33356)
  </details>

## Templates
- Fix VoiceOver doesnot announces the State of the ComboBox by
@SuthiYuvaraj in #32286

## Xaml
- [XSG][BindingSourceGen] Add support for CommunityToolkit.Mvvm
ObservablePropertyAttribute by @simonrozsival via @Copilot in
#33028
  <details>
  <summary>🔧 Fixes</summary>

- [[XSG] Add heuristic to support bindable properties generated by other
source generators](#32597)
  </details>


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

- [XSG] Improve diagnostic reporting during binding compilation by
@simonrozsival via @Copilot in #32905
- [Testing] Fixed Test case failure in PR 33574 - [01/19/2026] Candidate
- 1 by @TamilarasanSF4853 in #33602

</details>
**Full Changelog**:
main...inflight/candidate
@github-actions github-actions bot locked and limited conversation to collaborators Feb 9, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

community ✨ Community Contribution p/0 Current heighest priority issues that we are targeting for a release. partner/syncfusion Issues / PR's with Syncfusion collaboration

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Navigation section present under hamburger are programmatically define as table :A11y_.NET maui_User can get all the insights of Dashboard_Devtools

5 participants