webentwicklung-frage-antwort-db.com.de

Entfernen Sie den Rand von UISearchBar in iOS7

Ich versuche, den Rand von UISearchBar in iOS 7 zu entfernen. In iOS 6 funktioniert es einwandfrei. Ich habe die UISearchBar programmatisch erstellt. Ich habe fast alles von Stack Overflow und Google ausprobiert. 

SearchBar sucht jetzt
SearchBar looking right now

Was ich erreichen will
What i want to achieve

Ich habe alle diese Sachen ausprobiert

searchBar.layer.borderWidth = 1;
searchBar.layer.borderColor = [[UIColor whiteColor] CGColor];

und 

for (id img in searchBar.subviews)
{       
     if ([img isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
     {     
            [img removeFromSuperview];    
     }
} 

und 

for (UIView *sub in self.tableView.tableHeaderView.subviews) {
    if ([sub isKindOfClass:[UIImageView class]]) {
        sub.hidden = YES;
    }
}  

aber immer noch kein erfolg.

46
iEngineer

Ich habe die Lösung gefunden: Setzen Sie barTintColor von UISearchBar auf clearColor

topSearchBar.barTintColor = [UIColor clearColor];
24
iEngineer

Suchstil festlegen = minimal in den Suchleisten-Eigenschaften in IB

Oder

Swift:
searchBar.searchBarStyle = UISearchBarStyleMinimal;

Swift 3:
searchBar.searchBarStyle = .minimal;
87
nerowolfe

Durch das Festlegen von searchBarStyle auf UISearchBarStyleMinimal wurde mein Farbsetup durcheinander gebracht, sodass das Problem stattdessen behoben wurde.

[self.searchField setBackgroundImage:[[UIImage alloc]init]];

Für diejenigen, die diese Option in Swift 4 suchen:

searchField.setBackgroundImage(UIImage(), for: .any, barMetrics: UIBarMetrics.default)
54
Rich Fox

Für Swift reichen diese beiden Zeilen:

self.search.translucent = false
self.search.backgroundImage = UIImage()

Dann wenden Sie die gewünschte Farbe an, die Sie möchten:

self.search.barTintColor = UIColor.redColor()
22
Alap Anerao

Dies funktioniert nur, wenn .borderStyle = UITextBorderStyleLine; .


Meine Experimente Schlussfolgerung

  • Wenn Sie iOS7 oder höher verwenden und searchBar.barTintColor = [UIColor clearColor]; einstellen, können Sie die Hintergrundfarbe von UISearchBar nicht anpassen.

  • wenn Sie searchBarStyle auf UISearchBarStyleMinimal setzen, wird die Farbe von UISearchBar geändert, wie von @Rich Fox gesagt.

Also, [self.searchField setBackgroundImage:[[UIImage alloc]init]]; Lösung, um den Rand zu entfernen.

Update mit Beispiel:

UISearchBar *search = [[UISearchBar alloc] init];
search.tag = kTagSearchBar;
search.delegate = self;
search.tintColor = [UIColor redColor];
search.searchBarStyle = UISearchBarStyleMinimal;
search.frame = CGRectMake(0, 0, 320, 50);
search.placeholder = @"Search";
search.barTintColor = [UIColor blueColor];
search.translucent = NO;
search.opaque = NO;
search.showsCancelButton = NO;
[search setBackgroundImage:[[UIImage alloc] init]];
[self.view addSubview:search];

//customize textfield inside UISearchBar
@try {
    for (id object in [[[search subviews] firstObject] subviews])
    {
        if (object && [object isKindOfClass:[UITextField class]])
        {
            UITextField *textFieldObject = (UITextField *)object;
            textFieldObject.backgroundColor = [UIColor whiteColor];
            textFieldObject.borderStyle = UITextBorderStyleLine;
            textFieldObject.layer.borderColor = [UIColor blueColor].CGColor;
            textFieldObject.layer.borderWidth = 1.0;
            break;
        }
    }
}
@catch (NSException *exception) {
    NSLog(@"Error while customizing UISearchBar");
}
@finally {

}

werde dir geben:

enter image description here

11
Hemang

Weder nur barTintColor, backgroundImage noch backgroundColor alleine machten es für mich, aber es machte alles für mich:

self.searchBar.translucent      = NO;
self.searchBar.barTintColor     = [styleManager currentSearchBarTintColor];
self.searchBar.backgroundImage  = [UIImage new];
self.searchBar.backgroundColor  = [styleManager currentSearchBarTintColor];
2
Kreeble Song
self.searchBar.translucent = NO;
self.searchBar.opaque = NO;
if ([self.searchBar respondsToSelector:@selector(setSearchBarStyle:)]) {
    self.searchBar.searchBarStyle = UISearchBarStyleMinimal;
}

// iOS 7 remove 1 px bottom border
if ([self.searchBar respondsToSelector:@selector(setBarTintColor:)]) {
    self.searchBar.barTintColor = [UIColor clearColor];
}
self.searchBar.barStyle = UIBarStyleDefault;

// to remove the 1px bottom border iOS 5, 6
[self.searchBar setBackgroundImage:[UIImage imageWithColor:[UIColor clearColor] andSize:CGSizeMake(1.0f, 1.0f)]];

Die Reihenfolge des Codes scheint eine Rolle zu spielen. Es funktioniert nicht, wenn ich den barStyle vor dem searchBarStyle setze.

1
George Lai

Swift 2.1 in Xcode 7.2, das hat für mich funktioniert.

self.searchController.searchBar.backgroundImage = UIImage()

Mein vollständiger Code unten.

searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
self.searchController.searchBar.sizeToFit() 
tableView.sectionIndexBackgroundColor = UIColor(red: 0/255, green: 181/255, blue: 229/255, alpha: 1.0)
self.searchController.searchBar.backgroundColor = UIColor(red: 0/255, green: 181/255, blue: 229/255, alpha: 1.0)
self.searchController.searchBar.barTintColor = UIColor(red: 0/255, green: 181/255, blue: 229/255, alpha: 1.0)
self.searchController.searchBar.backgroundImage = UIImage()
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
1
Kyle KIM

Okay. Es gibt so viele Antworten, aber sie sind zu komplex. Ich habe diese Lösung gefunden:

Swift 3 (4)

searchBar.setBackgroundImage(UIImage(), for: .top, barMetrics: .default)
searchBar.backgroundColor = .primary

Wo .primär ist

extension UIColor {

    static var primary:UIColor {
        return "#5163F4".color
    }
}
0
Daniil Chuiko
- (void)createNavigationBar
{
    _searchBar = [[UISearchBar alloc]init];
    _searchBar.backgroundColor = [UIColor whiteColor];
    _searchBar.placeholder = @"Search";
    _searchBar.translatesAutoresizingMaskIntoConstraints = NO;

    self.navigationItem.titleView = _searchBar;
    NSDictionary *viewsDictionary = @{@"SearchBar":_searchBar};
    NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[SearchBar(30)]|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:viewsDictionary];
    NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-15-[SearchBar]-15-|"
                                                                        options:0
                                                                        metrics:nil
                                                                          views:viewsDictionary];
    [_searchBar.superview addConstraints:constraint_POS_V];
    [_searchBar.superview addConstraints:constraint_POS_H];

}

 enter image description here

0
David