web-dev-qa-db-fra.com

Supprimer la bordure de UISearchBar dans iOS7

J'essaie de supprimer la bordure de UISearchBar dans iOS 7. Sous iOS 6, cela fonctionne bien. J'ai créé le programme UISearchBar par programmation. J'ai presque tout essayé avec Stack Overflow et Google. 

SearchBar regarde maintenant
SearchBar looking right now

Ce que je veux réaliser
What i want to achieve

J'ai essayé tous ces trucs mentionnés ci-dessous

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

et 

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

et 

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

mais toujours pas de succès.

46
iEngineer

J'ai trouvé la solution: définissez la barTintColor de UISearchBar sur clearColor 

topSearchBar.barTintColor = [UIColor clearColor];
24
iEngineer

Définir le style de recherche = minimal dans les propriétés de la barre de recherche dans IB

Ou

Swift:
searchBar.searchBarStyle = UISearchBarStyleMinimal;

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

La définition de searchBarStyle sur UISearchBarStyleMinimal a gâché ma configuration de couleurs, ce qui a donc résolu le problème.

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

Pour ceux qui recherchent cette option dans Swift 4:

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

Pour Swift, ces 2 lignes suffisent:

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

Et ensuite, appliquez la couleur requise que vous voulez:

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

Cela ne fonctionne que si .borderStyle = UITextBorderStyleLine; .


La conclusion de mes expériences,

  • Si vous utilisez iOS7 ou une version ultérieure, et que vous définissez searchBar.barTintColor = [UIColor clearColor];, vous ne pourrez pas personnaliser la couleur d'arrière-plan de UISearchBar.

  • si vous définissez searchBarStyle sur UISearchBarStyleMinimal, alors la couleur de UISearchBar sera altérée, comme l'a dit @Rich Fox.

Donc, [self.searchField setBackgroundImage:[[UIImage alloc]init]]; solution pour supprimer la bordure.

Mise à jour avec échantillon:

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 {

}

te donnera:

enter image description here

11
Hemang

Ni seulement barTintColor, backgroundImage ni backgroundColor seuls le faisaient pour moi, mais les faire tous ensemble a fonctionné pour moi:

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)]];

L'ordre du code semble avoir de l'importance. Cela ne fonctionne pas si je place le barStyle avant le searchBarStyle.

1
George Lai

Swift 2.1 dans Xcode 7.2, cela a fonctionné pour moi.

self.searchController.searchBar.backgroundImage = UIImage()

Mon code complet ci-dessous.

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

D'accord. Il y a tellement de réponses, mais elles sont trop complexes. J'ai trouvé cette solution:

Swift 3 (4)

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

Où est la primaire

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