Skip to content

Conversation

@NirmalKumarYuvaraj
Copy link
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!

Description of Change

This pull request addresses an issue where labels could be overlapped by the Android status bar when using SafeAreaEdges=Container in .NET MAUI Shell navigation. The changes improve how safe area insets are calculated and applied for full-screen views on Android, and introduce new test cases to verify the fix.

Safe Area Insets Calculation Improvements (Android):

  • Added logic to detect full-screen views and always apply the full safe area insets for them, bypassing unreliable position-based calculations during Shell navigation. This prevents UI elements like labels from being overlapped by system UI.
  • Ensured that views with zero padding are untracked from the global window insets listener to avoid stale tracking and incorrect padding application.

Test Coverage:

  • Added a new UI test (Issue32941) to verify that after navigation, the label is not overlapped by the Android status bar when SafeAreaEdges=Container is used.
  • Added a new test case for the issue, including two content pages and navigation logic, to reproduce and verify the scenario (src/Controls/tests/TestCases.HostApp/Issues/Issue32941.cs).

Issues Fixed

Fixes #32941

Output

Before After
Before.mov
After.mov

@dotnet-policy-service dotnet-policy-service bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Dec 5, 2025
@NirmalKumarYuvaraj NirmalKumarYuvaraj added platform/android community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration and removed partner/syncfusion Issues / PR's with Syncfusion collaboration labels Dec 5, 2025
@Tamilarasan-Paranthaman Tamilarasan-Paranthaman added the area-safearea Issues/PRs that have to do with the SafeArea functionality label Dec 5, 2025
@sheiksyedm sheiksyedm marked this pull request as ready for review December 5, 2025 14:29
Copilot AI review requested due to automatic review settings December 5, 2025 14:29
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 fixes an Android-specific issue where labels and other UI elements could be overlapped by the status bar when using SafeAreaEdges=Container in .NET MAUI Shell navigation. The fix improves safe area inset calculation by detecting full-screen views and applying consistent insets during navigation, while also ensuring proper view tracking cleanup.

Key Changes

  • Enhanced safe area calculation logic to detect full-screen views and apply reliable insets during Shell navigation
  • Added view untracking when padding is reset to zero to prevent stale tracking
  • Introduced comprehensive UI test coverage for the navigation scenario

Reviewed changes

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

File Description
src/Core/src/Platform/Android/SafeAreaExtensions.cs Core fix: Added full-screen view detection (95% threshold), improved position-based calculation conditions, and view untracking logic
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32941.cs NUnit UI test implementation with navigation verification via screenshot comparison
src/Controls/tests/TestCases.HostApp/Issues/Issue32941.cs Test case UI with two pages demonstrating Shell navigation with SafeAreaEdges=Container
src/Controls/tests/TestCases.Android.Tests/snapshots/android-notch-36/ShellContentShouldRespectSafeAreaEdges_After_Navigation.png Reference screenshot for automated visual verification

Comment on lines 17 to 18
[Category(UITestCategories.Shell)]
[Category(UITestCategories.SafeAreaEdges)]
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

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

Multiple [Category] attributes detected. According to the UI testing guidelines, each test should have only ONE [Category] attribute. Please pick the most specific category that applies to this test.

Since this test is primarily about SafeAreaEdges behavior (which is the core issue being tested), consider using only [Category(UITestCategories.SafeAreaEdges)] and removing the Shell category.

Copilot generated this review using guidance from repository custom instructions.
Comment on lines 1 to 2
using System.Collections.ObjectModel;

Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

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

The unused import System.Collections.ObjectModel should be removed as it's not used anywhere in this file.

Suggested change
using System.Collections.ObjectModel;

Copilot uses AI. Check for mistakes.
top = Math.Min(top - viewTop, top);
}
else
else if ((viewHeight > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews)
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

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

The condition (viewHeight > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews contains redundant checks. The hasTrackedViews condition appears twice - once in the OR clause and once in the AND clause. This makes the logic unnecessarily complex and potentially confusing.

Consider simplifying to: hasTrackedViews && !isFullScreen since if hasTrackedViews is false, the entire AND expression would be false anyway, making the (viewHeight > 0 || hasTrackedViews) part redundant.

Copilot uses AI. Check for mistakes.
bottom = Math.Min(viewBottom - bottomEdge, bottom);
}
else
else if ((viewHeight > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews)
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

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

The condition (viewHeight > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews contains redundant checks. The hasTrackedViews condition appears twice - once in the OR clause and once in the AND clause. This makes the logic unnecessarily complex and potentially confusing.

Consider simplifying to: hasTrackedViews && !isFullScreen since if hasTrackedViews is false, the entire AND expression would be false anyway, making the (viewHeight > 0 || hasTrackedViews) part redundant.

Copilot uses AI. Check for mistakes.
left = Math.Min(left - viewLeft, left);
}
else
else if ((viewWidth > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews)
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

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

The condition (viewWidth > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews contains redundant checks. The hasTrackedViews condition appears twice - once in the OR clause and once in the AND clause. This makes the logic unnecessarily complex and potentially confusing.

Consider simplifying to: hasTrackedViews && !isFullScreen since if hasTrackedViews is false, the entire AND expression would be false anyway, making the (viewWidth > 0 || hasTrackedViews) part redundant.

Copilot uses AI. Check for mistakes.
right = Math.Min(viewRight - rightEdge, right);
}
else
else if ((viewWidth > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews)
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

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

The condition (viewWidth > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews contains redundant checks. The hasTrackedViews condition appears twice - once in the OR clause and once in the AND clause. This makes the logic unnecessarily complex and potentially confusing.

Consider simplifying to: hasTrackedViews && !isFullScreen since if hasTrackedViews is false, the entire AND expression would be false anyway, making the (viewWidth > 0 || hasTrackedViews) part redundant.

Copilot uses AI. Check for mistakes.

// A view is considered full-screen if it occupies most of the available content area
// Use a percentage-based threshold (95%) instead of fixed pixels to handle all screen sizes
bool isFullScreen = (viewWidth >= availableWidth * 0.95) && (viewHeight >= availableHeight * 0.95);
Copy link
Contributor

Choose a reason for hiding this comment

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

Why 95%?

@kubaflo
Copy link
Contributor

kubaflo commented Dec 5, 2025

Review Feedback: PR #33014 - Fixed Label Overlapped by Android Status Bar (BEFORE Code Quality Fixes)

Recommendation

⚠️ Request Changes

Required changes:

  1. ❌ Remove unused using System.Collections.ObjectModel; statement in Issue32941.cs (HostApp)
  2. ❌ Remove duplicate [Category] attribute - keep only [Category(UITestCategories.SafeAreaEdges)] in test
  3. ❌ Fix redundant hasTrackedViews conditions in SafeAreaExtensions.cs (4 instances)
  4. ❌ Extract magic number 0.95 as named constant with documentation

Recommended changes:

  1. ⚠️ Consider adding programmatic validation of padding values in test (not just screenshot)
  2. ⚠️ Consider edge case testing for views at 94-96% screen size range
  3. ⚠️ Add documentation about the 95% threshold rationale

📋 Full PR Review Details (Original Code)

Summary

PR #33014 fixes issue #32941 where labels were overlapped by the Android status bar when using SafeAreaEdges="Container" in Shell navigation. The root cause was position-based safe area calculations running during Shell navigation before views had finalized positions, resulting in zero padding when full padding should be applied.

Fix approach: Introduces "full-screen" view detection (≥95% of available screen space) to skip unreliable position-based optimization and always apply full safe area insets to full-screen views.

Fix effectiveness: ✅ Successfully resolves the reported issue
Code quality: ⚠️ Contains minor issues that should be addressed


Code Review

Root Cause Analysis

The problem occurs in SafeAreaExtensions.ApplyWindowInsets(). The existing code attempts to optimize safe area padding by calculating view positions:

// OLD: Position-based optimization attempted immediately
if (top > 0 && viewTop < top && viewTop >= 0)
    top = Math.Min(top - viewTop, top); // Reduce inset if view doesn't overlap
else if (viewHeight > 0 || hasTrackedViews)
    top = 0; // Remove inset entirely

The bug: During Shell navigation to a page with SafeAreaEdges=Container and NavBarIsVisible=False:

  1. SafeArea calculation runs DURING navigation animation
  2. View position (viewTop, viewBottom, etc.) not yet finalized
  3. Position-based check incorrectly determines "no overlap"
  4. Padding set to 0 instead of full safe area inset
  5. Label renders behind status bar

The Fix - Analysis

Key insight: ContentPages are typically full-screen views. For full-screen views, position-based optimization is unnecessary AND unreliable during navigation.

The PR adds:

// Detect full-screen views
var availableWidth = screenWidth - baseSafeArea.Left - baseSafeArea.Right;
var availableHeight = screenHeight - baseSafeArea.Top - baseSafeArea.Bottom;
bool isFullScreen = (viewWidth >= availableWidth * 0.95) && (viewHeight >= availableHeight * 0.95);

// Skip position optimization for full-screen views
if (top > 0 && hasTrackedViews && !isFullScreen && viewTop < top && viewTop >= 0)
{
    top = Math.Min(top - viewTop, top);
}
else if ((viewHeight > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews)
{
    top = 0;
}

Why this works:

  1. Full-screen views detected via size (≥95% of available space)
  2. Position-based optimization skipped for full-screen views
  3. Full-screen views always get full safe area insets
  4. Non-full-screen views continue to use position-based optimization

Assessment: ✅ The fix correctly addresses the root cause. The approach is sound and pragmatic.


Code Quality Issues

❌ Issues Requiring Fixes

1. Redundant Boolean Conditions (4 instances)

Location: SafeAreaExtensions.cs, lines 172, 186, 199, 213

Issue:

else if ((viewHeight > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews)

Problem: hasTrackedViews appears twice in the condition. The expression (viewHeight > 0 || hasTrackedViews) && hasTrackedViews simplifies to just hasTrackedViews.

Why:

  • If hasTrackedViews is true, the whole expression is true (regardless of viewHeight)
  • If hasTrackedViews is false, the whole expression is false (regardless of viewHeight)
  • Therefore, viewHeight > 0 || has no effect

Fix:

else if (hasTrackedViews && !isFullScreen)

Impact: Low severity - code works correctly but is unnecessarily complex and confusing.


2. Magic Number: 0.95

Location: SafeAreaExtensions.cs, line 163

Issue:

bool isFullScreen = (viewWidth >= availableWidth * 0.95) && (viewHeight >= availableHeight * 0.95);

Problem: The threshold value 0.95 (95%) is hardcoded without explanation or documentation.

Questions:

  • Why 95% and not 90% or 99%?
  • What testing determined this value?
  • Could this need adjustment in the future?

Fix:

// At class level
private const double FullScreenThreshold = 0.95; // 95%
// Add comment explaining: "Views occupying ≥95% of available screen space are 
// considered full-screen (typically ContentPages) and should always receive 
// full safe area insets to avoid timing issues during Shell navigation."

// In method
bool isFullScreen = (viewWidth >= availableWidth * FullScreenThreshold) && 
                    (viewHeight >= availableHeight * FullScreenThreshold);

Impact: Medium severity - makes the code less maintainable and the choice less clear.


3. Unused Import

Location: Issue32941.cs (TestCases.HostApp), line 1

Issue:

using System.Collections.ObjectModel;

Problem: This namespace is imported but never used in the file.

Fix: Remove the line.

Impact: Low severity - code works but violates clean code principles.


4. Multiple [Category] Attributes

Location: Issue32941.cs (TestCases.Shared.Tests), lines 17-18

Issue:

[Category(UITestCategories.Shell)]
[Category(UITestCategories.SafeAreaEdges)]

Problem: According to UI testing guidelines (.github/instructions/uitests.instructions.md):

Only ONE [Category] attribute per test. Pick the most specific category that applies.

Fix: Remove [Category(UITestCategories.Shell)], keep only [Category(UITestCategories.SafeAreaEdges)] since SafeAreaEdges is the primary focus.

Impact: Low severity - test runs correctly but violates repository conventions.


Test Coverage

Included Tests

Test page: Issue32941.cs (HostApp)

  • ✅ Creates Shell with two pages
  • ✅ Page 1: Basic page with navigation button
  • ✅ Page 2: Sets SafeAreaEdges=Container and NavBarIsVisible=False (reproduces issue)
  • ✅ Label at top should respect safe area

NUnit test: Issue32941.cs (Shared.Tests)

  • ✅ Navigates to second page
  • ✅ Uses VerifyScreenshot() for validation
  • ❌ Has dual Category attributes (should fix)

Test Quality Assessment

Strengths:

  • ✅ Accurately reproduces the reported issue
  • ✅ Tests the exact scenario from the bug report
  • ✅ Would catch regressions if code reverted

Weaknesses:

  • ❌ Only uses screenshot validation (visual comparison)
  • ❌ Doesn't programmatically verify padding values
  • ❌ Doesn't test edge cases (94%, 96% screen sizes)
  • ❌ Doesn't test rapid navigation scenarios

Recommended additions:

// Programmatic validation example
var label = App.WaitForElement("testLabel");
var labelRect = label.GetRect();
Assert.That(labelRect.Y, Is.GreaterThan(0), 
    "Label should have top padding from safe area, not be at Y=0");

Edge Cases Analysis

Identified Edge Cases (Not Tested)

  1. 95% Threshold Boundary 🔴 HIGH RISK

    • Scenario: View at 94.9% of screen size
    • Expected: Should get position-based calculation
    • Risk: Might incorrectly get zero padding if position not finalized
    • Impact: Same bug could occur for near-full-screen dialogs/popups
  2. Rotation During Navigation 🟡 MEDIUM RISK

    • Scenario: Device rotates while navigating to SafeAreaEdges page
    • Risk: availableWidth/Height calculated before rotation completes
    • Impact: isFullScreen calculated with wrong dimensions
  3. Rapid Back/Forward Navigation 🟡 MEDIUM RISK

    • Scenario: Quick navigation: Page1 → Page2 → Page1 → Page2
    • Risk: hasTrackedViews state might get confused
    • Impact: Padding might not apply correctly on second visit
  4. Multi-Window/Split-Screen 🟢 LOW RISK

    • Scenario: App in split-screen mode (50% of physical screen)
    • Impact: Probably works correctly (95% of available space still applies)

Issues Found Summary

Must Fix ❌

  1. Redundant boolean conditions (4 instances)

    • Simplify (viewHeight > 0 || hasTrackedViews) && !isFullScreen && hasTrackedViews to hasTrackedViews && !isFullScreen
  2. Magic number 0.95

    • Extract as const double FullScreenThreshold = 0.95 with documentation
  3. Unused import

    • Remove using System.Collections.ObjectModel; from Issue32941.cs (HostApp)
  4. Dual Category attributes

    • Remove [Category(UITestCategories.Shell)], keep only SafeAreaEdges

Should Fix ⚠️

  1. Test validation methodology

    • Add programmatic padding verification (not just screenshots)
    • Makes tests more reliable and easier to debug
  2. Edge case coverage

    • Test views at 94%, 95%, 96% of screen size
    • Verify threshold behavior is correct
  3. Threshold documentation

    • Add comment explaining why 95% was chosen
    • Document testing that determined this value

Testing Plan

Validation Tests to Run

  1. Run PR's included test

    pwsh .github/scripts/BuildAndRunHostApp.ps1 -Platform android -TestFilter "FullyQualifiedName~Issue32941"
  2. ⚠️ Add edge case test (recommended)

    • Test view at 94% screen size
    • Verify it receives position-based (partial) insets, not full insets
    • Ensure threshold logic works correctly
  3. ⚠️ Add programmatic validation (recommended)

    • Verify label Y-position > 0
    • Confirm padding was actually applied

Approval Checklist

  • Code solves the stated problem ✅
  • Minimal, focused changes ✅
  • [~] Code quality meets standards ⚠️ (has fixable issues)
  • No security concerns ✅
  • Follows .NET MAUI conventions ✅
  • Platform-specific code properly isolated ✅
  • [~] Appropriate test coverage ⚠️ (adequate but could be stronger)
  • Tests pass on target platform (needs validation)
  • No performance concerns ✅

Overall: Strong fix with minor code quality issues that should be addressed before merge.


Recommendations

Required Before Merge

  1. Fix redundant boolean conditions (4 instances)
  2. Extract 0.95 as named constant with documentation
  3. Remove unused import
  4. Fix dual Category attributes

Recommended for Future

  1. Add programmatic test validation
  2. Add edge case tests for threshold boundary
  3. Document threshold selection rationale in code comments

Final Assessment

The fix is fundamentally sound

  • Correctly identifies the root cause (timing issue during Shell navigation)
  • Uses pragmatic approach (full-screen detection)
  • Should work for vast majority of cases (ContentPages)

Code quality needs minor improvements ⚠️

  • Four specific issues identified above
  • All are straightforward to fix
  • No architectural concerns

Test coverage is adequate

  • Includes regression test for reported issue
  • Would benefit from programmatic assertions
  • Edge cases identified but not critical for initial merge

Recommendation: Request Changes to address the four code quality issues, then approve.


Review Metadata

@PureWeen
Copy link
Member

PureWeen commented Dec 6, 2025

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@PureWeen
Copy link
Member

PureWeen commented Dec 7, 2025

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@PureWeen
Copy link
Member

PureWeen commented Dec 7, 2025

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@PureWeen
Copy link
Member

PureWeen commented Dec 7, 2025

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

@PureWeen
Copy link
Member

PureWeen commented Dec 8, 2025

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

Copy link
Member

Choose a reason for hiding this comment

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

@NirmalKumarYuvaraj can you evaluate if this is a regression or an expected visual change?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@PureWeen , This is a regression. I will check and update

@PureWeen
Copy link
Member

PureWeen commented Dec 8, 2025

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 3 pipeline(s).

NirmalKumarYuvaraj and others added 15 commits December 8, 2025 12:17
- Modified full-screen detection to only apply when hasTrackedViews=true
  This prevents TabbedPage content from being incorrectly treated as
  full-screen during initialization, which was breaking ListView ItemTapped events

- Simplified position-based calculation logic by removing redundant hasTrackedViews checks
  This restores original behavior for non-full-screen views

- Updated Issue32941 test from screenshot-based to position-based assertions
  Test now verifies label Y position is >= 20px to ensure it's not overlapped by status bar

- Simplified Issue32941 HostApp implementation for better maintainability

- Removed unnecessary screenshot snapshot file

Fixes the breaking test TestIssue1763ItemTappedFiring while preserving the fix for dotnet#32941
- Replaced percentage-based full-screen detection with deterministic parent hierarchy analysis
  Views are now identified as top-level by checking if their parent implements ISafeAreaView2

- Parent-based logic: top-level if no parent OR parent doesn't implement ISafeAreaView2 OR (parent implements ISafeAreaView2 AND hasTrackedViews)

- More reliable than 95% threshold, avoids edge cases with screen size calculations
…View/ViewCell

- Created ISafeAreaIgnoredContainer marker interface in Core layer
- ListView, TableView, ViewCell now implement ISafeAreaIgnoredContainer
- SafeAreaExtensions checks parent hierarchy for this interface
- Views inside these containers completely skip safe area logic
- Clean architectural solution - no type name string comparisons needed

This ensures ViewCells never apply safe area insets, similar to how
ScrollView and CollectionView manage their own layout.
- Removed from all PublicAPI.Unshipped.txt files
- Interface is internal so should not be in PublicAPI
- Check if view's parent or ancestors implement ISafeAreaIgnoredContainer
- Don't skip safe area for the containers themselves, only their content
- Fixes app crash on navigation
Instead of early return, set safe area values to 0 when inside
ListView/TableView/ViewCell. This allows view tracking and padding
reset to work correctly, fixing layout issues in ListView.
ViewCell should not implement ISafeAreaIgnoredContainer.
Only ListView and TableView (the containers) need it.
ViewCell is a template, not a container.
…content

All pages where ListView or TableView is the direct Content need
SafeAreaRegions.Container to work correctly with ISafeAreaIgnoredContainer.

Affected pages:
- Bugzilla58875 ListViewPage
- Bugzilla32206 ContentPage32206
- Bugzilla52533
- Bugzilla43941 ContentPage43941
- Bugzilla33578
- Bugzilla32040
- Issue1028
Simplified the ISafeAreaIgnoredContainer hierarchy checking by removing
the redundant direct parent check. The while loop already checks the
parent on its first iteration, so the separate if statement was unnecessary.

No functional change - same behavior with cleaner code.
Both pages have ListView/TableView as root content and need SafeAreaRegions.Container
to work correctly with ISafeAreaIgnoredContainer implementation.

- Issue5924: TableView as root content
- ShellInsets ListViewPage: ListView as root content
Both tests have ListView as root content and need SafeAreaRegions.Container
to work correctly with ISafeAreaIgnoredContainer implementation.

- Issue1658: ListView with context actions and gesture recognizer
- Issue6258: ListView with context actions icon
Move the ISafeAreaIgnoredContainer logic from SafeAreaExtensions to
MauiWindowInsetListener.FindListenerForView(). This prevents inset listeners
from being added to ListView/TableView children in the first place, rather
than applying listeners and then zeroing out safe area.

Benefits:
- Cleaner architecture: listeners aren't added where they shouldn't be
- More efficient: no unnecessary listener attachment or calculations
- Clearer intent: early rejection at listener discovery phase
The ISafeAreaIgnoredContainer check now happens in FindListenerForView,
so we no longer need this logic in SafeAreaExtensions. This simplifies
the code and makes safe area calculation more straightforward.
@github-actions
Copy link
Contributor

github-actions bot commented Dec 8, 2025

🚀 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 -- 33014

Or

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

- Add ISafeAreaIgnoredContainer interface to mark ListView and TableView
- Prevent SafeArea inset listener from being applied to children of ignored containers
- Add UI test for Issue33034 to validate TabbedPage with ListView behavior
- Children of ListView/TableView should not have SafeArea insets applied
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-safearea Issues/PRs that have to do with the SafeArea functionality community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/android

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Label Overlapped by Android Status Bar When Using SafeAreaEdges="Container" in .NET MAUI

4 participants