File: Platform\iOS\SemanticExtensions.cs
Web Access
Project: src\src\Core\src\Core.csproj (Microsoft.Maui)
using UIKit;
 
namespace Microsoft.Maui.Platform
{
	public static partial class SemanticExtensions
	{
		internal static void UpdateSemantics(this UIBarItem platformView, Semantics? semantics)
		{
			if (semantics == null)
				return;
 
			platformView.AccessibilityLabel = semantics.Description;
			platformView.AccessibilityHint = semantics.Hint;
 
			var accessibilityTraits = platformView.AccessibilityTraits;
			var hasHeader = (accessibilityTraits & UIAccessibilityTrait.Header) == UIAccessibilityTrait.Header;
 
			if (semantics.IsHeading)
			{
				if (!hasHeader)
				{
					platformView.AccessibilityTraits = accessibilityTraits | UIAccessibilityTrait.Header;
				}
			}
			else
			{
				if (hasHeader)
				{
					platformView.AccessibilityTraits = accessibilityTraits & ~UIAccessibilityTrait.Header;
				}
			}
		}
 
		public static void UpdateSemantics(this UIView platformView, IView view) =>
			UpdateSemantics(platformView, view?.Semantics);
 
		internal static void UpdateSemantics(this UIView platformView, Semantics? semantics)
		{
			if (semantics == null)
				return;
 
			if (platformView is UISearchBar searchBar)
			{
				var textField = searchBar.GetSearchTextField();
 
				if (textField == null)
					return;
 
				platformView = textField;
			}
 
			platformView.AccessibilityLabel = semantics.Description;
			platformView.AccessibilityHint = semantics.Hint;
 
			if (!string.IsNullOrWhiteSpace(semantics.Hint) || !string.IsNullOrWhiteSpace(semantics.Description))
			{
				// Most UIControl elements automatically have IsAccessibilityElement set to true
				if (platformView is not UIControl)
					platformView.IsAccessibilityElement = true;
				// UIStepper and UIPageControl inherit from UIControl but iOS marks `IsAccessibilityElement` to false
				// because they are composite controls.
				else if (platformView is UIStepper || platformView is UIPageControl)
					platformView.IsAccessibilityElement = true;
			}
 
			var accessibilityTraits = platformView.AccessibilityTraits;
			var hasHeader = (accessibilityTraits & UIAccessibilityTrait.Header) == UIAccessibilityTrait.Header;
 
			if (semantics.IsHeading)
			{
				if (!hasHeader)
				{
					platformView.AccessibilityTraits = accessibilityTraits | UIAccessibilityTrait.Header;
				}
			}
			else
			{
				if (hasHeader)
				{
					platformView.AccessibilityTraits = accessibilityTraits & ~UIAccessibilityTrait.Header;
				}
			}
		}
	}
}