IOS7でUISearchBar
をminimal style
に設定すると、色合いが黒くなり、黒地に黒があるためテキストが読めなくなります。
これでは、望ましい結果が得られません。選択したときの色合いはまだ黒です...
if(floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
{
// set bar style
_sendToSearchBar.barStyle = UIBarStyleDefault;
// set bar transparancy
_sendToSearchBar.translucent = NO;
// set bar color
_sendToSearchBar.barTintColor = [UIColor whiteColor];
// set bar button color
_sendToSearchBar.tintColor = [UIColor whiteColor];
// set bar background color
_sendToSearchBar.backgroundColor = [UIColor whiteColor];
}
私は同じ問題を抱えて数時間試しましたが、結論としてUISearchBarはかなりバグがあります!特に「最小」モードで。
私の回避策は:
[UIColor clearColor]
を使用してUIImageを作成します[UIColor blackColor]
に設定します[UIColor whiteColor]
に設定します検索バーは通常の最小モードのように見え、選択すると背景が白になるため、黒い色のテキストを見ることができます。
回避策は完璧ではありません、それはただうまくいきます、希望は助けることができます。
私はこのバグを抱えていて、いくつかの調査の後、このコードが機能するようになりました! iOS 7+
//change searchbar color
[searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[searchBar setBackgroundImage:[UIImage imageWithCGImage:(__bridge CGImageRef)([UIColor clearColor])]];
// iOS7 and after
if(floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
{
// set bar style
bar.barStyle = UIBarStyleBlack;
// set bar transparancy
bar.translucent = NO;
// set bar color
bar.barTintColor = [UIColor blackColor];
// set bar button color
bar.tintColor = [UIColor blackColor];
// set bar background color
bar.backgroundColor = [UIColor blackColor];
}
searchField.searchBarStyle = UISearchBarStyleMinimal;
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor whiteColor]];
[searchField setBarTintColor:[UIColor blackColor]];
白いテキストで黒い色の検索バーを作成します。
appearanceWhenContainedIn
は、searchBarを作成し、実際に有効になるように最小スタイルを設定した後に呼び出す必要があります。
barstyle
とsearchbarstyle
の両方を設定すると、searchBarが予想される最小限のスタイルに変わることを発見しました
self.itemsSearchController.searchBar.barStyle = UIBarStyleDefault;
self.itemsSearchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
検索バーのプロパティを編集するだけで、検索バーが透明にならないようにすることができます。
self.iSearchController.searchBar.searchBarStyle = UISearchBarStyleDefault;
self.iSearchController.searchBar.backgroundImage = [UIImage imageWithImage: [UIImage imageNamed:@"whiteBackgroundImage.png"] withTintColor:[UIColor blackColor]]; // or you can just create any random plain image with this color and use it with imageNamed: method.
self.iSearchController.searchBar.barTintColor = [UIColor blackColor];
便宜上、imageWithImage:withTintColorMethodを以下に定義します。
@implementation UIImage (Category)
+ (UIImage *) imageWithImage: (UIImage*) image withTintColor: (UIColor*) color {
UIImage *newImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
UIGraphicsBeginImageContextWithOptions(newImage.size, NO, newImage.scale);
[color set];
[newImage drawInRect:CGRectMake(0, 0, newImage.size.width, newImage.size.height)];
newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
私も同じ問題を抱えていました。検索バーに白いカーソルがありましたが、入力を開始したとき、テキストは黒でした。また、検索アイコンが白ではなく灰色でした。私はこれに対する解決策をほとんど偶然に見つけました。
searchBar.setImage(UIImage(), for: .clear, state: .normal)