2016-02-25 32 views
2

我目前正在研究项目的可访问性,这里是放入自定义UITableViewCell的UICollectionView。此CollectionView具有数十个以多行排列而非一行排列的单元格。对于TableViewCell中的CollectionView的iOS辅助功能

它引发了一个问题,即当您将voiceOver打开并通过向左或向右滑动移动collectionViewCells之间的焦点时,系统认为您在tableViewCells之间滑动,因为collectionView位于tableView中,并且tableView的contentOffSet将根据tableViewCell大小而不是collectionViewCell大小进行更改。

CollectionView已经放在tableView中,我不认为我可以改变它。所以只是想知道有没有人遇到过这种情况,并有无论如何使collectionView正常访问?

+0

您需要提供更多的细节,得到具体回答这个问题。但是,通用答案是查看UIAccessibilityContainer协议,该协议仅适用于此类情况。 – ChrisCM

回答

0

只是解决通过重建整个页面的问题,这里有两件事情不要做,使您的应用程序更容易:

  1. 避免直接添加一个子视图到的tableView /的CollectionView像

    [tableView/collectionView addSubview:yourSubView];

  2. 避免将垂直滚动的collectionView添加到tableViewCell。

    将一个水平滚动的collectionView添加到tableViewCell似乎不会导致任何问题。

8

在AppleView SDK中嵌套collectionView时,这是Apple SDK中的一个已知错误(对不起,我没有错误报告参考)。一些实验后,我可以将它添加到我的UITableViewCell的.contentView前解决它通过使用一个UIView作为我的CollectionView的包装

UIView *wrapperView = [[UIView alloc] initWithFrame:cell.contentView.bounds]; 
    wrapperView.accessibilityElements = @[collectionView]; 
    [cell.contentView addSubview:wrapperView]; 
    [wrapperView addSubview:collectionView]; 
+0

非常感谢!它是这个问题上的最佳答案! – Melany

+0

您也可以在UITableViewCell本身上使用集合视图和表格单元格中可能具有的其他顶级项目(例如标题)手动设置它。 –

+0

'.accessibilityElements = @ [collectionView];'的好处。 –