3

灰色がかったUISearchBarがあります。

私が今抱えている問題は、色合いの色を設定するとすぐに、スコープボタンが同じフォントの色になり、ボタンが選択されていない場合、コントラストが非常に悪くなることです。

色合いが設定されていない場合は、選択した状態によって色が異なります。色合いを使用してこれを実現する方法はありますか?

デフォルト

色合い付き

色合いを使用する

色合いなし

アップデート

を使用して、には次のビュー階層があるpo [mySearchBar recursiveDescription]ことがわかりました。UISearchbar

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

4 に答える 4

10

色合いの色を使用すると、同様の問題が発生したことを思い出しているようです。不幸な副作用は、影響を受けるUIKit要素の色関連のプロパティがデフォルトになることです。

色合いを使用するときにこの欠陥を防ぐ方法があるかどうかはわかりませんが(あるとは思いません)、次の回避策が役立つ場合があります。

iOS6以下

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

iOS7以降

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

(クレジット:@willyang)

UISearchBarのメソッドを使用するsetScopeBarButtonTitleTextAttributes:forState:と、テキストの色など、スコープバーのボタンタイトルの属性を構成できます。

于 2013-03-13T12:43:52.017 に答える
7

UITextAttributeTextColorはIOS7で非推奨になっているため、代わりに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 に答える