我有一个UISearchBar,它必须有灰色。
我现在遇到的问题是,只要设置任何色调,范围按钮就会得到相同的字体颜色,如果按钮不是这样,会导致对比度非常差地选择。
如果未设置色调,则颜色会根据所选状态而有所不同。有没有办法实现这一点,使用淡色?
使用po [mySearchBar recursiveDescription]
我发现UISearchbar
具有以下视图层次结构:
<UISegmentedControl>
<_UISegmentedControlBackgroundView>
<UIImageView>
<UISegment>
<UISegmentLabel>
<UIImageView>
<UISegment>
<UISegmentLabel>
<UIImageView>
<UISegment>
<UISegmentLabel>
<UIImageView>
<UISearchBarBackground>
答案 0 :(得分:10)
我似乎记得在使用色调时会遇到类似的问题。看来不幸的副作用是它默认了它影响的UIKit元素的颜色相关属性。
我不知道在使用色调时是否有办法防止此缺陷(我认为没有),但以下解决方法可能对您有用:
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], UITextAttributeTextColor, nil] forState:UIControlStateNormal];
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], UITextAttributeTextColor, nil] forState:UIControlStateSelected];
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], NSForegroundColorAttributeName, nil] forState:UIControlStateSelected];
(图片来源:@willyang)
使用UISearchBar
的{{1}}方法,您可以配置范围栏按钮标题的属性,包括文本颜色。
答案 1 :(得分:7)
因为在IOS 7中不推荐使用 UITextAttributeTextColor ,所以应该使用 NSForegroundColorAttributeName :
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], NSForegroundColorAttributeName, nil] forState:UIControlStateSelected];
参考:http://www.downstairz.net/2013/11/24/uitextattributetextcolor-is-deprecated-in-ios-7/
答案 2 :(得分:1)
斯威夫特3:
如果以编程方式构建SearchBar,可以使用以下命令设置ScopeBar的TextAttributes:
let searchController = UISearchController(searchResultsController: nil) // inside the class
...
// Background color
searchController.searchBar.setScopeBarButtonTitleTextAttributes([NSBackgroundColorAttributeName: UIColor.yellow ], for: UIControlState.normal)
您可以查看UISearchBar方法(向下滚动以查找ScopeBar方法)来自定义: https://developer.apple.com/reference/uikit/uisearchbar?language=objc
答案 3 :(得分:0)
如果我的问题正确,那么这就是你要做的事情
for (id subview in yourSearchDisplayController.searchBar.subviews )
{
if([subview isMemberOfClass:[UISegmentedControl class]])
{
UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
[scopeBar setSegmentedControlStyle:UISegmentedControlStyleBar];
[scopeBar setTintColor: [UIColor redColor]];//you can also set RGB color here
//scopeBar.tintColor = [UIColor blackColor];
}
}