因此,我有一个表视图,在viewforheaderinsection中,我创建了一个视图,以编程方式创建了一些控件,如按钮和分段控件。我将这些控件添加为视图的子视图,然后返回视图。问题是,当Accessibility读取控件时,它会在末尾附加"heading“。它说“按钮”停顿,然后说“标题”。我知道我可以将headerview转换为单元格来抑制"heading“标注,但这不是一个选项。这个项目相当大,需要很多时间才能将标题视图转换为单元格。有没有一种方法可以在不将标题视图更改为单元格的情况下抑制“标题”标注?
发布于 2017-03-18 12:14:19
你需要实现
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section;例如
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
view.accessibilityTraits = UIAccessibilityTraitNone;
}在该函数内部,将头文件的可访问性属性设置为UIAccessibilityTraitNone,或者简单地删除UIAccessibilityTraitHeader。
在里面做
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 这不会有任何好处,因为iOS稍后会添加header特征。您需要在显示标题之前修改特征。
发布于 2017-05-25 09:53:27
@cocoaaficionado的答案在我的iOS 10.3上不起作用。
我要做的是:
对于header视图,您需要子类化视图的accessibilityElements属性,并直接使用UIAccessibilityElements而不是UIView/UILabel/UIButton。
@interface NotAHeadingView : UIView
@end
@implementation NotAHeadingView
- (void)layoutSubviews
{
[super layoutSubviews];
NSMutableArray *accessibilityElements = [NSMutableArray arrayWithCapacity:self.subviews.count];
for (UIView *view in self.subviews) {
UIAccessibilityElement *element = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
// remove Header trait
element.accessibilityTraits = view.accessibilityTraits & ~UIAccessibilityTraitHeader;
element.accessibilityFrame = view.accessibilityFrame;
element.accessibilityLabel = view.accessibilityLabel;
element.accessibilityValue = view.accessibilityValue;
element.accessibilityHint = view.accessibilityHint;
element.accessibilityFrameInContainerSpace = view.frame;
[accessibilityElements addObject:element];
}
self.accessibilityElements = accessibilityElements;
}
@endUIView似乎会自动从视图层次结构中继承Header特征,即使覆盖直接superview的特征也是不够的。对我来说,这在iOS 10.3设备上是有效的。
这适用于简单的情况,但不适用于非常复杂的节标题视图(管理子视图的多个子viewControllers,包括scrollViews的深层视图层次结构)-相反,更容易改变这个视图的工作方式,以避免这些元素的节标题。YMMV
发布于 2019-11-07 20:10:18
Swift解决方案
对我来说,对header元素进行子类化并覆盖它们的accessibilityTraits属性是最简单的解决方案。
例如,我对header中的按钮也有同样的情况,下面是适用于我的解决方案:
class HeaderButton: UIButton {
private var _accessibilityTraits: UIAccessibilityTraits = UIAccessibilityTraits.button
override var accessibilityTraits: UIAccessibilityTraits {
get {
return _accessibilityTraits
}
set {
_accessibilityTraits = newValue
_accessibilityTraits.remove(UIAccessibilityTraits.header)
}
}
}https://stackoverflow.com/questions/39149259
复制相似问题