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
Ce que je veux réaliser
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.
J'ai trouvé la solution: définissez la barTintColor
de UISearchBar
sur clearColor
topSearchBar.barTintColor = [UIColor clearColor];
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;
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)
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()
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:
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];
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.
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
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
}
}
- (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];
}