Browse files

iOS: Remove leading space from accessibilityLabel

In some cases, the accessibilityLabel contains a leading space. This is because `RCTRecursiveAccessibilityLabel` adds a space before every iteration of the loop including the first.

After this change, the contract is that:
  - `RCTRecursiveAccessibilityLabel` always returns a string with a leading space.
  - `accessibilityLabel` never returns a string with a leading space.

**Test plan**

I created a test app with the following code:

<View style={{height: 100, width: 100, backgroundColor: 'steelblue'}} accessible={true}>
  <View style={{height: 20, width: 20, backgroundColor: 'red'}} accessibilityLabel='One' />
  <View style={{height: 20, width: 20, backgroundColor: 'yellow'}} accessibilityLabel='Two' />
  <View style={{height: 20, width: 20, backgroundColor: 'green'}} accessibilityLabel='Three' />

Before this change, the accessibilityLabel of the outermost View was " One Two Three" (notice the leading space).

After this change, it is "One Two Three" as desired.

Closes #12269

Reviewed By: javache

Differential Revision: D4596761

Pulled By: shergin

fbshipit-source-id: 7d5ff704e858d9f277d1547339a2831ffa90f592
  • Loading branch information...
rigdern authored and facebook-github-bot committed Feb 22, 2017
1 parent 15429e3 commit 6fbc2c99727b86f674de32481ed574a820376236
Showing with 7 additions and 1 deletion.
  1. +7 −1 React/Views/RCTView.m
@@ -81,11 +81,17 @@ - (UIView *)react_findClipView
static NSString *RCTRecursiveAccessibilityLabel(UIView *view)
BOOL isFirstIteration = YES;
NSMutableString *str = [NSMutableString stringWithString:@""];
for (UIView *subview in view.subviews) {
if (isFirstIteration) {
isFirstIteration = NO;
} else {
[str appendString:@" "];
NSString *label = subview.accessibilityLabel;
if (label) {
[str appendString:@" "];
[str appendString:label];
} else {
[str appendString:RCTRecursiveAccessibilityLabel(subview)];

0 comments on commit 6fbc2c9

Please sign in to comment.