web-dev-qa-db-ja.com

iOS7、UISearchBarのbackgroundImage

IOS6とiOS7の間でUIを移行しています。

UISearchDisplayControllerに関連するUISearchBarがあり、navigationBarとsearchBarのbackgroundImageを、色で動的に作成された1x1画像に設定しました。

self.searchDisplayController.searchBar.translucent = NO;
self.searchDisplayController.searchBar.barTintColor = [UIColor clearColor];
self.searchDisplayController.searchBar.tintColor = [UIColor myTintColor];
self.searchDisplayController.searchBar.backgroundImage = [self imageWithColor:[UIColor myBGColor]];
self.searchDisplayController.searchBar.scopeBarBackgroundImage = [self imageWithColor:[UIColor myBGColor]];

IOS6では、すべてが期待どおりに機能します。 iOS7では、searchBarを選択すると、scopeBarは適切なbackgroundImage(searchBar.scopeBarBackgroundImageで設定)で表示されますが、searchBarは一種の半透明の灰色です。 [キャンセル]を押すと、searchBarbackgroundImageが戻ってきます。

How it looks

////////////////////////////////////////////////// ////////////////////////////////////////////////// /

編集された質問

////////////////////////////////////////////////// ////////////////////////////////////////////////// /

実際、私はbarTintColorやその他のオプションをあちこちで使用しましたが、機能しません。これは、同じ色で設定されたbarTintColorの結果です。しかし、この白い層が上にあります enter image description here

25
Geraud.ch

IOS 7では、プロパティbackgroundImagescopeBarBackgroundImageが期待どおりに機能しなくなり、半透明になります。

この問題に対処する次の方法がiOS7に導入されました。 (ドキュメント ここ

setBackgroundImage:forBarPosition:barMetrics:

これがあなたがすべきことです:

 [self.searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:[UIColor yourColor]] 
                                             forBarPosition:0 
                                                 barMetrics:UIBarMetricsDefault];

ここに、 barPosition : 0UIBarPositionAnyです。

編集:

スウィフトコード:

self.searchDisplayController.searchBar.setBackgroundImage(self.image(color: UIColor.yourColor), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)
41
aksh1t

私はあなたがやろうとしていたことを再現することができました、そして私がbarTintColorを私の色の選択に設定するならばそれは私のために働くようです。

試してみることをお勧めします:

self.searchDisplayController.searchBar.barTintColor = [UIColor myBGColor];

やった [UIColor redColor]そして私が期待した結果を得ました。

4
Mike Z

現在のSwiftバージョンがないので、私もかなり長い間苦労してきたので、将来の使用のためにこれをここに残しておきます。

  1. 希望の色の1px画像を取得します(クリアでも)

  2. 以下を使用して、backgroundImageとして設定します。

    searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)

0
Antonin Charvat

検索バーのbarTintColorプロパティを設定すると、期待どおりの結果が得られます。私はこれを試したところ、うまくいきました:

self.searchDisplayController.searchBar.barTintColor = [UIColor yellowColor];

barTintColorプロパティはiOS7で導入されたことを覚えておいてください。

0
amb