diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.h b/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.h index 7d06fb61ba8..2b7c14fa25a 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.h +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.h @@ -17,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN * * Default value: `CGRectZero`. */ -@property (nonatomic, assign) CGRect frame; +@property (nonatomic, assign) CGRect frameInContainerSpace; @end NS_ASSUME_NONNULL_END diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.mm index 7ce44a3f174..60dfc922f9e 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTAccessibilityElement.mm @@ -12,10 +12,10 @@ - (CGRect)accessibilityFrame { UIView *container = (UIView *)self.accessibilityContainer; - if (CGRectEqualToRect(_frame, CGRectZero)) { + if (CGRectEqualToRect(_frameInContainerSpace, CGRectZero)) { return UIAccessibilityConvertFrameToScreenCoordinates(container.bounds, container); } else { - return UIAccessibilityConvertFrameToScreenCoordinates(_frame, container); + return UIAccessibilityConvertFrameToScreenCoordinates(_frameInContainerSpace, container); } } diff --git a/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentAccessibilityProvider.mm b/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentAccessibilityProvider.mm index 31f7ed37837..c2cc3884264 100644 --- a/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentAccessibilityProvider.mm +++ b/packages/react-native/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentAccessibilityProvider.mm @@ -62,20 +62,18 @@ using namespace facebook::react; accessibilityLabel = RCTNSStringFromString(_attributedString.getString()); } // add first element has the text for the whole textview in order to read out the whole text - RCTAccessibilityElement *firstElement = - [[RCTAccessibilityElement alloc] initWithAccessibilityContainer:_view.superview]; + RCTAccessibilityElement *firstElement = [[RCTAccessibilityElement alloc] initWithAccessibilityContainer:_view]; firstElement.isAccessibilityElement = YES; firstElement.accessibilityTraits = _view.accessibilityTraits; firstElement.accessibilityLabel = accessibilityLabel; firstElement.accessibilityLanguage = _view.accessibilityLanguage; - firstElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(_view.bounds, _view); [firstElement setAccessibilityActivationPoint:CGPointMake( firstElement.accessibilityFrame.origin.x + 1.0, firstElement.accessibilityFrame.origin.y + 1.0)]; + [elements addObject:firstElement]; // add additional elements for those parts of text with embedded link so VoiceOver could specially recognize links - [_layoutManager getRectWithAttributedString:_attributedString paragraphAttributes:_paragraphAttributes enumerateAttribute:RCTTextAttributesAccessibilityRoleAttributeName @@ -84,6 +82,7 @@ using namespace facebook::react; if ((![value isEqualToString:@"button"] && ![value isEqualToString:@"link"])) { return; } + if ([fragmentText isEqualToString:firstElement.accessibilityLabel]) { if ([value isEqualToString:@"link"]) { firstElement.accessibilityTraits |= UIAccessibilityTraitLink; @@ -93,6 +92,7 @@ using namespace facebook::react; // The fragment is the entire paragraph. This is handled as `firstElement`. return; } + if ([value isEqualToString:@"button"] && ([fragmentText isEqualToString:@"See Less"] || [fragmentText isEqualToString:@"See More"])) { @@ -110,7 +110,7 @@ using namespace facebook::react; numberOfButtons++; } element.accessibilityLabel = fragmentText; - element.frame = fragmentRect; + element.frameInContainerSpace = fragmentRect; [elements addObject:element]; }];