web-dev-qa-db-ja.com

UISearchBar Minimal Styleは、入力時に色合いを黒くします

IOS7でUISearchBarminimal 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];
}

enter image description here

17
Apollo

私は同じ問題を抱えて数時間試しましたが、結論としてUISearchBarはかなりバグがあります!特に「最小」モードで。

私の回避策は:

  • 検索スタイルをデフォルト(目立つ)に設定します
  • BackgroundImage(BackgroundColorではない)を透明な画像に設定するか、[UIColor clearColor]を使用してUIImageを作成します
  • BarTintColorを[UIColor blackColor]に設定します
  • TintColorを[UIColor whiteColor]に設定します

検索バーは通常の最小モードのように見え、選択すると背景が白になるため、黒い色のテキストを見ることができます。

回避策は完璧ではありません、それはただうまくいきます、希望は助けることができます。

14
Rex Lam

私はこのバグを抱えていて、いくつかの調査の後、このコードが機能するようになりました! iOS 7+

//change searchbar color
[searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[searchBar setBackgroundImage:[UIImage imageWithCGImage:(__bridge CGImageRef)([UIColor clearColor])]];
11
Cayke Prudente
 // 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];
}
5
Sabareesh
searchField.searchBarStyle = UISearchBarStyleMinimal;
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor whiteColor]];
[searchField setBarTintColor:[UIColor blackColor]];

白いテキストで黒い色の検索バーを作成します。

appearanceWhenContainedInは、searchBarを作成し、実際に有効になるように最小スタイルを設定した後に呼び出す必要があります。

2
Yerk

barstylesearchbarstyleの両方を設定すると、searchBarが予想される最小限のスタイルに変わることを発見しました

self.itemsSearchController.searchBar.barStyle = UIBarStyleDefault;
self.itemsSearchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
1

検索バーのプロパティを編集するだけで、検索バーが透明にならないようにすることができます。

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;
}
0
coolcool1994

私も同じ問題を抱えていました。検索バーに白いカーソルがありましたが、入力を開始したとき、テキストは黒でした。また、検索アイコンが白ではなく灰色でした。私はこれに対する解決策をほとんど偶然に見つけました。

searchBar.setImage(UIImage(), for: .clear, state: .normal)
0
andrei