【发布时间】:2015-11-10 22:01:04
【问题描述】:
所以我在 UIViewController 中有一个 UICollectionView,它是标签栏中的根视图控制器之一。我为 UICollectionView 设置了一个 contentInset,这样我就可以在 collectionView 的顶部添加一个标签,此时这意味着 UILabel 是 collectionView 的一部分,但不是 collectionView 的 headerView 的一部分。为了实现在 UICollectionView 中添加 UILabel,我使用了
collectionView.addSubview(theLabel)
然后我打开语音并运行应用程序。发生的情况是画外音以正确的顺序通过所有 UICollectionViewCells 一直到最后一个 CollectionViewCell 开始,然后转到位于 collectionView 顶部的标签,然后转到 tabBar。我在这个Change order of read items with VoiceOver 中尝试了答案,但没有运气,这个解决方案确实改变了
self.accessibilityElements
按照我想要的方式,除了画外音并没有真正遵循 self.accsibilityElements 中的顺序,而且我不确定发生了什么,有没有人遇到同样的麻烦,因为可访问性顺序被搞砸了,因为UICollectionView 上使用了“addsubView”。 IF(我说 IF,因为我认为没有人会以这种方式将 subView 添加到 collectionView 中)任何人有任何想法请在这里帮助我,被这个错误困扰的时间最长。
编辑
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)
}
}
}
谢谢, 沙布里
【问题讨论】:
-
为什么要在集合视图中添加子视图?
-
我们本可以使用这两种解决方案中的一种,我们已经在标题内有另一个视图(让我们将此视图称为广告视图) 1)在 collectionView 的标题内添加 theLabel 和广告视图 2)通过给 collectionView 一个 contentInset,将 theLabel 添加到 cpollectionView 的顶部。如果我们采用第一种方法,当我们处于横向时,问题就出现了,我们不想看到标签,假设我将 theLabel 和广告视图添加到带有一些常量的 headerView 中,当我在横向中隐藏 theLabel 时,我会约束有问题
-
同时当我们在collectionView的顶部隐藏导航栏时,我还想保留用户滚动了多少的标签,因为一旦用户在标签之后滚动, 我取消隐藏导航栏
-
显示您尝试更改可访问性顺序的代码
-
@Mr.T 我刚刚添加了代码,检查“didAddSubView”
标签: ios swift uicollectionview uiaccessibility