因此,我在一个UICollectionView中有一个UIViewController,它是制表符栏中的根视图控制器之一。我为contentInset为UICollectionView设置了一个标签,以便在collectionView顶部添加一个标签,这意味着UILabel是collectionView的一部分,而不是collectionView的headerView的一部分。为了实现将UILabel添加到UICollectionView,我使用
collectionView.addSubview(theLabel)我打开声音运行应用程序。所发生的是,画外音以正确的顺序通过所有的UICollectionViewCells,直到最后一个CollectionViewCell开始,然后转到位于collectionView顶部的标签,然后转到tabBar。我在这个Change order of read items with VoiceOver中尝试了答案,但是没有成功,这个解决方案确实改变了
self.accessibilityElements按照我想要的方式,除了over并没有真正按照self.accsibilityElements中的顺序进行,而且我也不确定发生了什么,是否有人会遇到同样的麻烦,因为在UICollectionView上使用了"addsubView“。如果(我说如果,因为我不认为任何人会以这种方式将subView添加到collectionView中)任何人都有任何想法--请在这里帮助我,这个bug被困的时间最长。
编辑
class CollectionViewSubViewsAddedByTags: UICollectionView {
override func awakeFromNib() {
super.awakeFromNib()
}
var accessibilityElementsArray = [AnyObject]()
override var accessibilityElements: [AnyObject]?{
get{
return accessibilityElementsArray
}
set(newValue) {
super.accessibilityElements = newValue
}
}
override func accessibilityElementCount() -> Int {
return accessibilityElementsArray.count
}
override func accessibilityElementAtIndex(index: Int) -> AnyObject? {
return self.accessibilityElementsArray[index]
}
override func indexOfAccessibilityElement(element: AnyObject) -> Int {
return (accessibilityElementsArray.indexOf({ (element) -> Bool in
return true
}))!
}
override func didAddSubview(subview: UIView) {
super.didAddSubview(subview)
accessibilityElementsArray.append(subview)
accessibilityElementsArray.sortInPlace { $0.tag<($1.tag)}
}
override func willRemoveSubview(subview: UIView) {
super.willRemoveSubview(subview)
if let index = (accessibilityElementsArray.indexOf({ (element) -> Bool in
return true
})) {
accessibilityElementsArray.removeAtIndex(index)
}
}
}谢了,沙布里
发布于 2016-02-25 06:34:16
我也遇到过同样的问题--我在UICollectionView上使用了一个顶部的嵌入,以便为带有滚动的屏幕上/下滑动的标题留出空间。如果我在这个布局中使用了语音,那么整个系统就会变得混乱,焦点顺序也会不正确。为了解决这个问题,我所做的是在VO被激活时使用一个备用布局--而不是将标题放在集合视图上,而是将标题垂直放置在集合视图的上方,并在集合视图上设置0顶部嵌入。
https://stackoverflow.com/questions/33640472
复制相似问题