Use accessibilityElements to specify containment for contentView and buttons. You can use Accessibility Inspector from Xcode to verify.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
classArticleCell: UICollectionViewCell{ let authorLabel: UILabel let dateLabel: UILabel
let viewLabel: UILabel let deleteButton: UIButton
privatefuncsetupAccessibility() { contentView.isAccessibilityElement = true contentView.accessibilityLabel = "This article is written by Nobita on Dec 4th 2020"
viewLabel.isAccessibilityElement = true// Default is false viewLabel.accessibilityTraits.insert(.button) // Treat UILabel as button to VoiceOver
This works OK under Voice Over and Accessibility Inspector. However in iOS 14 UITests, only the contentView is recognizable. The workaround is to use XCUICoordinate
1 2 3 4 5 6 7 8 9
let deleteButton = cell.buttons["Delete article"] if deleteButton.waitForExistence(timeout: 1) { deleteButton.tap() } else { let coordinate = cell.coordinate( withNormalizedOffset: CGVector(dx: 0.9, dy: 0.9) ) coordinate.tap() }