如何使 UISearchBar 的书签图标可访问?
Posted
技术标签:
【中文标题】如何使 UISearchBar 的书签图标可访问?【英文标题】:How to make a UISearchBar's bookmarks icon accessible? 【发布时间】:2013-03-22 14:44:19 【问题描述】:我正在尝试改进应用中的旁白支持。我有一个UISearchBar
。我已将showBookMarks
属性设置为YES
。我已经设置了一个自定义图像:
[searchbar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];
我遇到的问题是,打开 Voice Over 后,无法激活书签图标。如果我输入文本,则会出现“清除”图标,并且可以按预期选择和激活它。但是一旦文本被清除并且我的书签图标出现,它就不能被选中。无论我在哪里点击,画外音矩形始终围绕整个搜索栏,包括图标。
我尝试在图标的UIImage
上设置accessibilityLabel
和accessibilityTraits
属性。我已将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];
附加信息:
我应该提到搜索栏与UITableViewController
一起使用,它与UISearchDisplayController
连接。搜索栏被设置为表格视图的headerView
。
所有这些都是在代码中完成的。不涉及故事板或 xib。
【问题讨论】:
【参考方案1】:经过一番调试,我找到了答案。为了让 Voice Over 识别 UISearchBar
的书签图标的自定义图标,该图标的大小必须完全正确。
使用的图像必须为 40x29 像素(Retina 版本为 80x58 像素)。 Voice Over 无法识别任何其他尺寸和图标。
我的图片是 38x31 像素(和 68x62 像素)。
我在原始问题中发布的代码都是正确的。图像大小更新后,一切都开始按预期工作。代码中唯一的变化是删除了对 setPositionAdjustment:forSearchBarIcon:
的调用,这不再需要了。
我无法想象为什么图标大小如此微小的差异会导致 Voice Over 使用自定义图标和不工作之间的差异。但它就在那里。我希望这对将来的某人有所帮助。
【讨论】:
@downvoter 请解释反对意见。我发布了我遇到的问题的确切答案。这是使 Voice Ovet 在这种情况下正常工作的未记录要求。 请说明您在哪里发现 UISearchBarIconBookmark 的大小应该是 40x29px?它是最小尺寸、最大尺寸、精确尺寸还是精确比例?我可以让它与其他一些尺寸一起使用,但我不知道哪个是推荐的。 我通过反复试验找到了它。我的原始尺寸不起作用。当我尝试指定尺寸时,它开始工作。我没有测试其他组合,所以其他一些尺寸肯定会起作用。如果您知道其他可行的尺寸,请发布它们以便其他人受益。【参考方案2】:我已经运行了您问题中的代码,并且书签按钮似乎可以通过 VoiceOver 访问。
会不会有其他东西干扰了您的界面?任何可能在书签按钮顶部找到的不可见视图?您是否正在设置自定义清除按钮?您可以提供任何其他详细信息吗?
但是,它确实没有使用您传递的accessibilityLabel
;它只是使用“按钮”,这很糟糕。我会说这可能是 UIKit 中的一个错误——你应该file a bug。
【讨论】:
谢谢。我没有提到的一件事(我很快会更新我的问题)是搜索栏正在与UITableViewControler
和UISearchDisplayController
一起使用。搜索栏设置为表格视图的headerView
。我想我需要创建一个新项目并一次添加一个项目,看看是什么让它停止为我工作。
好主意 - 可能是 UITAbleViewController
中的某些东西干扰了 VoiceOver。
您是否真的为搜索栏设置了自定义图标?我创建了一个简单的测试项目。如果我使用默认书签图标,则可以访问图标按钮。但是,一旦我应用了自己的自定义书签图标,就无法再访问它了。以上是关于如何使 UISearchBar 的书签图标可访问?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 7 的 UISearchBar 中更改位置或隐藏放大镜图标?
XPages headTag“书签”图标 - 由于代理路由,文件不存在