web-dev-qa-db-ja.com

UISearchBarの背景を明確にする

検索バーをクリアできません。背景色をクリアにしてクリアしようとしました。また、検索バーの下に1つの画像を配置しました。

検索バーの背景も明確にした

 for (UIView *subview in self.searchBarHome.subviews) {
      if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
         [subview removeFromSuperview];//please help me to make clear background of uisearchbar
        break; 
    }
}
[self.searchBarHome setBackgroundColor:[UIColor clearColor]];
24
Vikram

IOS7以降の場合、必要なことは次のとおりです。

[self.searchBarHome setBackgroundColor:[UIColor clearColor]];
[self.searchBarHome setBarTintColor:[UIColor clearColor]]; //this is what you want

[〜#〜] note [〜#〜]:これはiOS6では機能しません


IOS6 +の場合、iOS7でも次のように処理されます。

[self.searchBarHome setBackgroundColor:[UIColor clearColor]];
[self.searchBarHome setBackgroundImage:[UIImage new]];
[self.searchBarHome setTranslucent:YES];
33
staticVoidMan

Swift 3(ScarafoneとAndrew2Mの回答の組み合わせ))の私の解決策は次のとおりです。

for view in searchBar.subviews.last!.subviews {
        if type(of: view) == NSClassFromString("UISearchBarBackground"){
            view.alpha = 0.0
        }
}

または代わりに:

searchBar.barTintColor = UIColor.clear
searchBar.backgroundColor = UIColor.clear
searchBar.isTranslucent = true
searchBar.setBackgroundImage(UIImage(), for: .any, barMetrics: .default)
22
Eden

UISearchBarには、「UISearchBarBackground」と「UITextField」の2つのサブビューがあります。 IOS8では、 'UISearchBarBackground'を削除してクリアする必要があります。

for (UIView *subview in [[yourSearchBar.subviews lastObject] subviews]) {        
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [subview removeFromSuperview];
        break;
    }
}
16
Ruozi

UISearchBarBackgroundを削除すると、特に要素をより高度な方法で使用し始めた場合に、不明な動作が発生する可能性があります。

Ruoziの答えは、UISearchBarBackground要素を取得するための推奨ソリューションでしたが、次のようにビューを削除するのではなく、アルファを0に設定することをお勧めします。

for (UIView *subview in [[self.searchBar.subviews lastObject] subviews]) {
    if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) {
        [subview setAlpha:0.0];
        break;
    }
}

上記のコードを、IBOutlet * searchBarを含むUIViewControllerサブクラスに追加します。このコードスニペットは、iOS8とiOS9の両方の背景を透明にします。

さらに、viewControllerが乱雑にならないようにするために、UISearchBarサブクラスにこのコードを含める方が設計上の決定が適切になる場合があります。

11
Andrew2M

ハッキングされていない解決策を見つけようとしている人は、ストーリーボード/ Xibファイルで背景画像をnilに設定するだけです。文字通り、UISearchBarの背景画像フィールドにnilと書くだけです。

9
Rog

BackgroundColorとbarTintColorを設定しても、iOS 9以降では機能せず、背景が黒のままでした。ただし、Ruoziソリューションは機能します。ここに同じコードのSwiftバージョンがあります。

for view in _searchBar.subviews.last!.subviews {
    if view.isKindOfClass(NSClassFromString("UISearchBarBackground")!) {
        view.removeFromSuperview()
    }
}
4
Scarafone

私のソリューションはSwift 4.1に取り組んでいます| iOS 11.4UISearchBarの背景とテキストの色を変更します

enter image description here

重要なのは、UISearchBarのUITextFieldコンポーネントを見つけて、そのパラメーターを変更することです。

let searchTextField = searchBar.value(forKey: "searchField") as? UITextField
searchTextField?.textColor = UIColor.white
searchTextField?.backgroundColor = UIColor.red
searchTextField?.attributedPlaceholder =  NSAttributedString(string: "Your Placeholder", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white.withAlphaComponent(0.5)])

次に、「検索」と「クリア」の画像を設定します

//search image
searchBar.setImage(UIImage(named: "icon_search"), for: UISearchBarIcon.search, state: .normal)
//clear image
searchBar.setImage(UIImage(named: "icon_search_clear"), for: UISearchBarIcon.clear, state: .normal)
4
ivoroto

これを変更したい場合...

enter image description here

これに...

enter image description here

使用する:

self.searchBar.searchTextField.backgroundColor = .clear
4
Derek Soike

ここに来て、削除またはアルファソリューションを機能させることができない人のために、MINIMALISTにsearchBar SearchStyle [〜#〜] not [〜#〜]があることを確認してください。それをデフォルトに変更し、ここで提供されるコードのいずれかを使用します

3
gmogames
extension UISearchBar {
    func changeSearchBarColor(fieldColor: UIColor, backColor: UIColor, borderColor: UIColor?) {
        UIGraphicsBeginImageContext(bounds.size)
        backColor.setFill()
        UIBezierPath(rect: bounds).fill()
        setBackgroundImage(UIGraphicsGetImageFromCurrentImageContext()!, for: UIBarPosition.any, barMetrics: .default)

        let newBounds = bounds.insetBy(dx: 0, dy: 8)
        fieldColor.setFill()
        let path = UIBezierPath(roundedRect: newBounds, cornerRadius: newBounds.height / 2)

        if let borderColor = borderColor {
            borderColor.setStroke()
            path.lineWidth = 1 / UIScreen.main.scale
            path.stroke()
        }

        path.fill()
        setSearchFieldBackgroundImage(UIGraphicsGetImageFromCurrentImageContext()!, for: UIControlState.normal)

        UIGraphicsEndImageContext()
    }
}
2
ChanOnly123

単にsearchBar.searchBarStyle = .minimalは私のために働きます。

私はこのプロパティを偶然発見して魅力のように機能するまで、長い間多くの回避策を使用していました。

2
Romulo BM

Uisearchbarをサブクラス化し、initWithFrameおよびinitWithCoderメソッドをオーバーライドして、背景色を次のように設定します。

// For searchbar created programmatically
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self configureSetup];
    }
    return self;
}

// For search bar created on xib
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self configureSetup];
    }
    return self;
}

- (void)configureSetup
{
    self.backgroundColor = [UIColor clearColor];
}

uISearchBarを指定した場所ではなく、サブクラス化された検索バーを使用します

1
ldindu

ちょっと、あなた!私はあらゆる場所で解決策を探し、複数のことを試みてきました。 @gmogamesは上記のように記述されているため、これらの回答のいずれかを使用できますが、検索バーのスタイルがデフォルトに設定されていることを確認してください。そうしないと機能しません。だから、解決策を明確にするために、これは私にとってうまくいったものです:

ストーリーボードまたはコード(UISearchBarを作成した場所)で検索バーのスタイルをデフォルトに設定します。次に、このコードをビューコントローラーに追加します。

mySearchBar.searchTextField.backgroundColor = .clear
1
humbleCoder

IOS 12の場合Swift 4.xややこしすぎますが、デバッグビューの階層は_UISearchBarSearchFieldBackgroundViewが背景色に関与していることを示しています。それに到達するには、...

for subview in searchBar.subviews.last!.subviews {
   if subview.isKind(of: NSClassFromString("UISearchBarTextField")!) {
       for v in subview.subviews {
          if v.isKind(of: NSClassFromString("_UISearchBarSearchFieldBackgroundView")!) {
                  v.removeFromSuperview()
                }
            }
        }
    }

これはあまりにもハックです。私はデザイナーにAppleデフォルトの色を受け入れるように依頼することを好みます。

0
Johnson
searchBarStyle = .default
searchTextField.backgroundColor = .yourColor

この組み合わせを使用すると、searchTextFieldの灰色の背景を削除して、独自の背景を設定できます。

0
Vitya Shurapov