3

我有一个 UISearchBar 必须有灰色调。

我现在遇到的问题是,一旦我设置了任何色调颜色,范围按钮就会获得相同的字体颜色,如果未选择按钮,则会导致对比度非常差。

如果未设置色调,则颜色会因所选状态而异。有没有办法使用淡色来实现这一点?

默认

带色调

使用色调

没有色调

更新

使用po [mySearchBar recursiveDescription]我发现UISearchbar具有以下视图层次结构:

<UISegmentedControl>
    <_UISegmentedControlBackgroundView>
        <UIImageView>
    <UISegment>
        <UISegmentLabel>
        <UIImageView>
    <UISegment>
        <UISegmentLabel>
        <UIImageView>
    <UISegment>
        <UISegmentLabel>
        <UIImageView>
<UISearchBarBackground>
4

4 回答 4

10

我似乎记得在使用浅色时遇到过类似的问题。似乎一个不幸的副作用是它默认了它影响的 UIKit 元素的颜色相关属性。

我不知道在使用 tints 时是否有办法防止这种缺陷(我认为没有),但以下解决方法可能对您有用:

iOS 6 及以下

[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], UITextAttributeTextColor, nil] forState:UIControlStateNormal];
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], UITextAttributeTextColor, nil] forState:UIControlStateSelected];

iOS 7+

[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor redColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];
[searchBar setScopeBarButtonTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], NSForegroundColorAttributeName, nil] forState:UIControlStateSelected];

(来源:@willyang)

使用UISearchBar'ssetScopeBarButtonTitleTextAttributes:forState:方法可以配置范围栏按钮标题的属性,包括文本颜色。

于 2013-03-13T12:43:52.017 回答
7

因为UITextAttributeTextColor在 IOS 7 中被弃用,应该使用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/

于 2014-08-26T08:47:56.580 回答
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

于 2017-01-12T19:39:43.753 回答
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];         
    }

}
于 2013-03-13T12:55:19.350 回答