我正在努力改善应用中的Voice Over支持。我有UISearchBar
。我已将showBookMarks
属性设置为YES
。我已经设置了一个自定义图像:
[searchbar setImage:icon forSearchBarIcon:UISearchBarIconBookmark state:UIControlStateNormal];
我遇到的问题是,启用Voice Over后,无法激活书签图标。如果我输入文本,则会出现“清除”图标,可以按预期选择并激活它。但是一旦文本被清除并且我的书签图标出现,就无法选择它。无论我在哪里点击,Voice Over矩形始终围绕整个搜索栏,包括图标。
我尝试在accessibilityLabel
上为图标设置accessibilityTraits
和UIImage
属性。我已将UIImage
的{{1}}属性设置为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。
答案 0 :(得分:5)
经过一堆调试后,我找到了答案。为了使Voice Over能够识别UISearchBar
书签图标的自定义图标,该图标的大小必须正确。
使用的图像必须为40x29px(视网膜版本为80x58px)。任何其他尺寸和图标都无法被Voice Over识别。
我的图像是38x31px(和68x62px)。
我在原始问题中发布的代码都是正确的。一旦图像大小更新,一切都开始按预期工作。代码中唯一的变化就是删除了不再需要的setPositionAdjustment:forSearchBarIcon:
调用。
我无法想象为什么图标大小的微小差异会导致Voice Over使用自定义图标而不能正常工作。但它确实如此。我希望这有助于将来的某个人。
答案 1 :(得分:1)
我在您的问题中运行了代码,并且书签按钮似乎可以通过VoiceOver访问。
还有其他东西会干扰您的界面吗?任何不可见的视图可能会在书签按钮上找到它们的方式?你在设置自定义清除按钮吗?您可以提供的任何其他详细信息吗?
然而,它确实没有使用你传递它的accessibilityLabel
;它只是使用“按钮”,这很糟糕。我说它可能是UIKit中的一个错误 - 你应该file a bug。