iOS: Remove leading space from accessibilityLabel

Summary:
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' />
</View>
```

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.

Adam
Closes https://github.com/facebook/react-native/pull/12269

Reviewed By: javache

Differential Revision: D4596761

Pulled By: shergin

fbshipit-source-id: 7d5ff704e858d9f277d1547339a2831ffa90f592
This commit is contained in:
Adam Comella 2017-02-22 11:00:38 -08:00 committed by Facebook Github Bot
parent 15429e333f
commit 6fbc2c9972
1 changed files with 7 additions and 1 deletions

View File

@ -81,11 +81,17 @@
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)];