将子视图添加到自定义 viewForHeaderInSection 会中断 VoiceOver 导航

Posted

技术标签:

【中文标题】将子视图添加到自定义 viewForHeaderInSection 会中断 VoiceOver 导航【英文标题】:Adding a subview to a custom viewForHeaderInSection breaks VoiceOver navigation 【发布时间】:2012-01-30 20:51:09 【问题描述】:

我有一个 UITableViewController,我正在尝试自定义部分标题,使其看起来更像纯文本。我发现当我将子视图添加到自定义 headerView(如下详述)时,它会破坏 VoiceOver 标题导航。

例如:假设我有一个包含三个标题的表:Header1、Header2、Header3。

如果没有 viewForHeaderInSection 方法的自定义实现,我可以切换画外音转子以按标题导航,一切都按预期工作。

当我以以下方式实现 viewForHeaderInSection 方法时,我可以从 Header1 移动到 Header2 再到 Header3 并返回到 Header2,但是画外音会丢失所有标题(说“找不到标题”)。

当我将 headerLabel 作为子视图添加到 headerView 时,我发现问题开始了。我尝试将 headerLabel 设置为隐藏的可访问性元素,因此画外音不会拾取它,但问题仍然存在。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 


UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)];

UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)];

headerLabel.textAlignment = UITextAlignmentLeft;
headerLabel.font = [UIFont boldSystemFontOfSize:22];
headerLabel.text = [headersArray objectAtIndex:section];
headerLabel.backgroundColor = [UIColor clearColor];

[headerView addSubview:headerLabel];

return headerView;


任何关于 VoiceOver 做出如此反应的想法都将不胜感激。

谢谢。

【问题讨论】:

我也面临同样的问题,如果有人能提供关于该主题的最新信息,那就太好了 将我添加到希望在使用自定义部分标题时提高可访问性的开发人员列表中。 【参考方案1】:

这不太可能是原始问题的答案,但我只是解决了一个类似的问题。

我为部分标题自定义了 UIView,并将这些内容保存在一个数组中,并偶尔重复使用它们。这完全混淆了 VoiceOvery,前进或后退并不总是会按预期选择上一个或下一个单元格。

但是,当我更改为每次调用 tableView:viewForHeaderInSection: 时创建一个新的 UIView 时,VoiceOver 的导航混乱停止了,一切正常。 我的标题视图是可访问的 (isAccessibleElement) 并且有一个标签集。

【讨论】:

当我在 viewForHeaderInSection 专门设置 headerView.isAccessibilityElement = true 时为我工作。谢谢。【参考方案2】:

我解决了类似的问题

headerLabel.accessibilityTraits = [.header]

(斯威夫特代码)

【讨论】:

以上是关于将子视图添加到自定义 viewForHeaderInSection 会中断 VoiceOver 导航的主要内容,如果未能解决你的问题,请参考以下文章

将子视图添加到自定义类

由于自动布局没有计算尺寸,将子视图添加到自定义视图最终会出错

添加和布局从 xib 加载的子视图到自定义单元格

jqgrid 更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?

jqgrid更改子网格的位置或将子网格图标添加到自定义列而不是其他任何地方?

如何将子视图添加到情节提要中的自定义 UITableViewCell