diff --git a/Source/ASCollectionView.mm b/Source/ASCollectionView.mm index f451c7727..a14853c1c 100644 --- a/Source/ASCollectionView.mm +++ b/Source/ASCollectionView.mm @@ -2390,4 +2390,12 @@ - (void)setPrefetchingEnabled:(BOOL)prefetchingEnabled return; } +#pragma mark - Accessibility overrides + +- (NSArray *)accessibilityElements +{ + [self waitUntilAllUpdatesAreCommitted]; + return [super accessibilityElements]; +} + @end diff --git a/Source/ASTableView.mm b/Source/ASTableView.mm index 5854410c9..99c1df82a 100644 --- a/Source/ASTableView.mm +++ b/Source/ASTableView.mm @@ -1969,4 +1969,12 @@ - (void)didMoveToSuperview } } +#pragma mark - Accessibility overrides + +- (NSArray *)accessibilityElements +{ + [self waitUntilAllUpdatesAreCommitted]; + return [super accessibilityElements]; +} + @end diff --git a/Source/Details/_ASDisplayViewAccessiblity.mm b/Source/Details/_ASDisplayViewAccessiblity.mm index 21ed15354..2fdc72853 100644 --- a/Source/Details/_ASDisplayViewAccessiblity.mm +++ b/Source/Details/_ASDisplayViewAccessiblity.mm @@ -11,10 +11,12 @@ #import #import +#import #import #import #import #import +#import #import @@ -208,7 +210,13 @@ static void CollectAccessibilityElementsForView(UIView *view, NSMutableArray *el ASDisplayNode *node = view.asyncdisplaykit_node; - if (node.isAccessibilityContainer) { + BOOL anySubNodeIsCollection = (nil != ASDisplayNodeFindFirstNode(node, + ^BOOL(ASDisplayNode *nodeToCheck) { + return ASDynamicCast(nodeToCheck, ASCollectionNode) != nil || + ASDynamicCast(nodeToCheck, ASTableNode) != nil; + })); + + if (node.isAccessibilityContainer && !anySubNodeIsCollection) { CollectAccessibilityElementsForContainer(node, view, elements); return; }