Ma question est déjà spécifiée dans le titre: je voudrais supprimer la ligne noire tracée au bas de la UISearchBar
. Des idées?
Voici une image de ce que je veux dire:
METTRE À JOUR:
Je pense que la ligne fait partie de la UITableView
's tableHeaderView
. Je ne sais toujours pas comment l'enlever.
J'ai corrigé cela en ajoutant une subview
à la pile de vues de searchBar
comme ceci:
CGRect rect = self.searchBar.frame;
UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(0, rect.size.height-2,rect.size.width, 2)];
lineView.backgroundColor = [UIColor whiteColor];
[self.searchBar addSubview:lineView];
Ici, self.searchBar
est un pointeur UISearchBar
de ma classe de contrôleur.
Essaye ça
searchBar.layer.borderWidth = 1;
searchBar.layer.borderColor = [[UIColor lightGrayColor] CGColor];
Donc, j'ai creusé dans l'API essayant de comprendre pourquoi cela se produit. Apparemment, quiconque a écrit l'API UISearchBar
rastérisation des lignes sur une image et le définit comme étant backgroundImage
.
Je propose une solution plus simple, si vous voulez définir la backgroundColor
et vous débarrasser des hairlines:
searchBar.backgroundColor = <#... some color #>
searchBar.backgroundImage = [UIImage new];
Ou si vous avez juste besoin d'une image de fond sans les hairlines:
searchBar.backgroundImage = <#... some image #>
J'ai 0.5px
des lignes horizontales noires en haut et en bas de ma UISearchBar
. La seule façon pour moi de m'en débarrasser jusqu'ici est de définir son style sur Minimal
:
mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
Swift 4.2:
controller.searchBar.layer.borderWidth = 1
controller.searchBar.layer.borderColor = UIColor(red: 255/255, green: 253/255, blue: 247/255, alpha: 1.0).cgColor
Réponse basée sur la réponse d'Ayush.
Cette question a déjà été résolue mais peut-être que ma solution pourra aider quelqu'un d'autre. J'ai eu un problème similaire, sauf que j'essayais de supprimer la bordure supérieure de 1px.
Si vous sous-classe UISearchBar
, vous pouvez remplacer le cadre de cette façon.
- (void)setFrame:(CGRect)frame {
frame.Origin.y = -1.0f;
[super setFrame:frame];
self.clipsToBounds = YES;
self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, 1.0f);
}
Ou si vous souhaitez réparer le pixel du bas, vous pouvez faire quelque chose comme ceci, (non testé).
- (void)setFrame:(CGRect)frame {
frame.Origin.y = 1.0f;
[super setFrame:frame];
self.clipsToBounds = YES;
self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, -1.0f);
}
clipsToBounds
et searchFieldBackgroundPositionAdjustment
dans setFrame
uniquement pour la simplicité de l'exemple.
De plus, searchFieldBackgroundPositionAdjustment
n'est nécessaire que pour recentrer le champ de recherche.
METTRE &AGRAVE; JOUR
Il s'avère que le tableView
décalera 1px de la mise à jour du Origin.y
tant que le searchBar est actif. C'est un peu étrange. J'ai réalisé que la solution est aussi simple que de configurer, self.clipsToBounds = YES;
Définissez la tableHeaderView sur nil
avant de placer votre UISearchBar
ici.
Si cela ne vous aide pas, essayez de le dissimuler. Tout d’abord, ajoutez votre barre de recherche à une variable UIView
générique et de taille appropriée (par exemple, "wrapper") en tant que sous-vue, puis
CGRect frame = wrapper.frame;
CGRect lineFrame = CGRectMake(0,frame.size.height-1,frame.size.width, 1);
UIView *line = [[UIView alloc] initWithFrame:lineFrame];
line.backgroundColor = [UIColor whiteColor]; // or whatever your background is
[wrapper addSubView:line];
[line release];
Et puis ajoutez-le à la tableHeaderView.
self.tableView.tableHeaderView = wrapper;
[wrapper release];
Attention. C'est un hack. Voudrais connaître un meilleur moyen, plus officiel.
Vous pouvez utiliser le débogueur pony pour déterminer où il se trouve dans la hiérarchie de sous-vues. Je pense que ce que vous voyez est un UIImageView privé appelé "séparateur"
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
for (UIView* view in self.searchBar.subviews) {
if (view.frame.size.height == 1 && [view isKindOfClass:[UIImageView class]]) {
view.alpha = 0;
break;
}
}
}