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が戻ってきます。
////////////////////////////////////////////////// ////////////////////////////////////////////////// /
編集された質問
////////////////////////////////////////////////// ////////////////////////////////////////////////// /
実際、私はbarTintColorやその他のオプションをあちこちで使用しましたが、機能しません。これは、同じ色で設定されたbarTintColorの結果です。しかし、この白い層が上にあります
IOS 7では、プロパティbackgroundImage
とscopeBarBackgroundImage
が期待どおりに機能しなくなり、半透明になります。
この問題に対処する次の方法がiOS7に導入されました。 (ドキュメント ここ )
setBackgroundImage:forBarPosition:barMetrics:
これがあなたがすべきことです:
[self.searchDisplayController.searchBar setBackgroundImage:[self imageWithColor:[UIColor yourColor]]
forBarPosition:0
barMetrics:UIBarMetricsDefault];
ここに、 barPosition : 0
はUIBarPositionAny
です。
編集:
スウィフトコード:
self.searchDisplayController.searchBar.setBackgroundImage(self.image(color: UIColor.yourColor), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)
私はあなたがやろうとしていたことを再現することができました、そして私がbarTintColor
を私の色の選択に設定するならばそれは私のために働くようです。
試してみることをお勧めします:
self.searchDisplayController.searchBar.barTintColor = [UIColor myBGColor];
やった [UIColor redColor]
そして私が期待した結果を得ました。
現在のSwiftバージョンがないので、私もかなり長い間苦労してきたので、将来の使用のためにこれをここに残しておきます。
希望の色の1px画像を取得します(クリアでも)
以下を使用して、backgroundImageとして設定します。
searchController.searchBar.setBackgroundImage(UIImage(named: "red"), for: .any, barMetrics: .default)
検索バーのbarTintColor
プロパティを設定すると、期待どおりの結果が得られます。私はこれを試したところ、うまくいきました:
self.searchDisplayController.searchBar.barTintColor = [UIColor yellowColor];
barTintColor
プロパティはiOS7で導入されたことを覚えておいてください。