9

我正在尝试改进应用程序中的旁白支持。我有一个UISearchBar. 我已将showBookMarks属性设置为YES. 我已经设置了一个自定义图像:

[searchbar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];

我遇到的问题是,打开 Voice Over 后,无法激活书签图标。如果我输入文本,则会出现“清除”图标,并且可以按预期选择和激活它。但是一旦文本被清除并且我的书签图标出现,它就不能被选中。无论我在哪里点击,画外音矩形总是围绕整个搜索栏,包括图标。

我尝试在图标上设置accessibilityLabelaccessibilityTraits属性。UIImage我已将UIImage'isAccessibilityElement属性设置为YES. 似乎没有任何效果。

有谁知道使书签图标UISearchBar可访问需要哪些步骤?

这是搜索栏的完整代码:

UISearchBar *bar = [[UISearchBar alloc] init];
[bar sizeToFit];
bar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
bar.placeholder = @"Search listed items";
bar.autocapitalizationType = UITextAutocapitalizationTypeNone;
bar.autocorrectionType = UITextAutocorrectionTypeNo;
bar.keyboardType = UIKeyboardTypeDefault;
bar.showsBookmarkButton = YES;
bar.text = @"";

UIImage *icon = [UIImage imageNamed:@"bookmarks.png"];
icon.accessibilityLabel = @"Bookmarks";
icon.accessibilityTraits = UIAccessibilityTraitButton;
icon.isAccessibilityElement = YES;
[bar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];
[bar setPositionAdjustment:UIOffsetMake(-1, -1) forSearchBarIcon:UISearchBarIconBookmark];

附加信息:

我应该提到,搜索栏与 a 一起使用,UITableViewController它与 a 相连UISearchDisplayController。搜索栏被设置为表格视图的headerView.

所有这些都是在代码中完成的。不涉及故事板或 xib。

4

2 回答 2

5

经过一堆调试,我找到了答案。为了让 Voice Over 识别 的书签图标的自定义图标,图标的UISearchBar大小必须完全正确。

使用的图像必须为 40x29 像素(视网膜版本为 80x58 像素)。Voice Over 无法识别任何其他尺寸和图标。

我的图像是 38x31 像素(和 68x62 像素)。

我在原始问题中发布的代码都是正确的。图像大小更新后,一切都开始按预期工作。代码中唯一的变化是删除了setPositionAdjustment:forSearchBarIcon:不再需要的调用。

我无法想象为什么图标大小的如此微小差异会是 Voice Over 使用自定义图标和不工作之间的区别。但它就在那里。我希望这对将来的某人有所帮助。

于 2013-03-22T22:33:45.177 回答
1

我已经运行了您问题中的代码,并且书签按钮似乎可以通过 VoiceOver 访问。

在此处输入图像描述

会不会有其他东西干扰了您的界面?任何可能在书签按钮顶部找到的不可见视图?您是否正在设置自定义清除按钮?您可以提供任何其他详细信息吗?

但是,它确实没有使用accessibilityLabel您传递的 ;它只是使用“按钮”,这很糟糕。我会说这可能是 UIKit 中的一个错误——你应该提交一个错误

于 2013-03-22T14:56:40.450 回答