当 UICollectionView 更改布局时覆盖 UIAccessibilityLayoutChangedNotification

Posted

技术标签:

【中文标题】当 UICollectionView 更改布局时覆盖 UIAccessibilityLayoutChangedNotification【英文标题】:Override UIAccessibilityLayoutChangedNotification when UICollectionView changes layout 【发布时间】:2016-03-18 14:46:03 【问题描述】:

我正在尝试在我的收藏视图上启用画外音辅助功能。 1.选择一个项目后,它将删除该部分中的其余项目,只留下被选中的项目。 2. 当我再次选择该项目时,它会使用之前删除的项目重新填充该部分。

对于第 1 步,画外音可以很好地读出项目,并且它将成为布局更改后的焦点。

但是,对于第 2 步,事情变得有点奇怪。它会开始读出该项目,在它完成之前,焦点会跳转到另一个项目,并开始阅读那个项目。

根据 Apple 关于集合视图的文档,它会在布局发生时自动发布布局更改通知。但是,从外观上看,它是在布局更改后将一些随机元素传递给第一个焦点元素。

当集合视图更改其屏幕布局时,它会发布 UIAccessibilityLayoutChangedNotification 通知。

有没有办法覆盖这个自动布局更改通知,以便我可以传入正确的焦点元素?

【问题讨论】:

为什么不发布您自己的布局更改通知? 【参考方案1】:

我找到了发生这种情况的原因。 一个元素随机聚焦的原因是因为我在 performBatchUpdate 的完成块中的 collectionview 上调用了 reloadData。 删除 reloadData 解决了这个问题。但是,因为我没有调用 reloadData,所以我必须在特定单元格上调用 reloadItemsAtIndexPaths,这对我来说很好。

【讨论】:

以上是关于当 UICollectionView 更改布局时覆盖 UIAccessibilityLayoutChangedNotification的主要内容,如果未能解决你的问题,请参考以下文章

根据部分更改 UICollectionView 布局

UICollectionView 上的动画自动布局约束更改

如何更改自定义 UICollectionView 布局引擎中的默认布局动画曲线?

在UICollectionView上动态设置布局会导致无法解释的contentOffset更改

自定义布局中约束更改的动画 UICollectionView 项目

在布局更改的同时重新加载/动画 UICollectionView