wake-up-neo.net

UISearchBar anpassen: Versucht, die 1px-schwarze Linie unter der Suchleiste zu entfernen

Meine Frage ist bereits im Titel angegeben: Ich möchte die schwarze Linie am unteren Rand des UISearchBarnamens__ loswerden. Irgendwelche Ideen?

Hier ist ein Bild von dem, was ich meine:

search bar with black bottom line

UPDATE:

Ich denke, dass die Zeile Teil des UITableViewname__s tableHeaderViewist. Ich weiß immer noch nicht, wie ich es entfernen soll.

39
strave

Ich habe dies behoben, indem ich eine subview zum Viewstack der searchBar hinzugefügt habe:

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

Hier ist self.searchBar ein UISearchBar-Zeiger meiner Controller-Klasse.

19
Nonlinearsound

Versuche dies

 searchBar.layer.borderWidth = 1;

 searchBar.layer.borderColor = [[UIColor lightGrayColor] CGColor];
69
Ayush Goel

Warum:

Also habe ich mich mit den APIs beschäftigt und versucht herauszufinden, warum das so ist. Wer die UISearchBar-API geschrieben hat, rastert offensichtlich die Zeilen in ein Bild und setzt es als backgroundImage.

Lösung:

Ich schlage eine einfachere Lösung vor, wenn Sie die backgroundColor setzen und die Haarlinien loswerden möchten:

searchBar.backgroundColor = <#... some color #>
searchBar.backgroundImage = [UIImage new];

Oder wenn Sie nur ein Hintergrundbild ohne Haarlinien benötigen:

searchBar.backgroundImage = <#... some image #>
42
Oxcug

Ich habe 0.5px schwarze horizontale Linien oben und unten in meiner UISearchBar. Ich konnte sie bisher nur loswerden, indem ich ihren Stil auf Minimal setzte:

mySearchBar.searchBarStyle = UISearchBarStyleMinimal;
26
ancajic

Lösung für 

XCode 10.1 Swift 4.2

 enter image description here

6
swift2geek

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

Antwort basierend auf Ayushs Antwort. 

5
VBaarathi

Diese Frage wurde bereits gelöst, aber meine Lösung kann jemand anderem helfen. Ich hatte ein ähnliches Problem, außer dass ich versuchte, den oberen Rand von 1px zu entfernen. 

Wenn Sie die Unterklasse UISearchBar verwenden, können Sie den Frame wie folgt überschreiben.

- (void)setFrame:(CGRect)frame {
    frame.Origin.y = -1.0f;
    [super setFrame:frame];

    self.clipsToBounds = YES;
    self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, 1.0f);
}

Oder wenn Sie das untere Pixel fixieren möchten, können Sie Folgendes tun (ungeprüft).

- (void)setFrame:(CGRect)frame {
    frame.Origin.y = 1.0f;
    [super setFrame:frame];

    self.clipsToBounds = YES;
    self.searchFieldBackgroundPositionAdjustment = UIOffsetMake(0, -1.0f);
}

Nur zur Vereinfachung des Beispiels sind die Variablen clipsToBounds und searchFieldBackgroundPositionAdjustment in der Variable setFrame enthalten.

Die Variable searchFieldBackgroundPositionAdjustment wird nur benötigt, um das Suchfeld neu zu zentrieren.

UPDATE

Es stellt sich heraus, dass die tableView 1px von der Aktualisierung des Origin.y entfernt wird, während die Suchleiste aktiv ist. Es fühlt sich ein bisschen seltsam an. Mir wurde klar, dass die Lösung so einfach ist wie das Setzen von self.clipsToBounds = YES;

3
cnotethegr8

Setzen Sie die tableHeaderView auf nil, bevor Sie Ihre UISearchBar dort ablegen. 

Wenn das nicht hilft, versuchen Sie es zu vertuschen. Fügen Sie Ihre Suchleiste zunächst einer generischen und entsprechend großen UIView (etwa "Wrapper") als Unteransicht hinzu, dann

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

Fügen Sie es dann dem tableHeaderView hinzu.

self.tableView.tableHeaderView = wrapper;
[wrapper release];
3
Mundi

Warnung. Das ist ein Hack. Ich würde gerne einen besseren, offizielleren Weg erfahren.

Mit dem Pony-Debugger können Sie herausfinden, wo sich die Subview-Hierarchie befindet. Ich denke, das, was Sie sehen, ist eine private UIImageView mit dem Namen "separator".

- (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;
    }
  } 
}
1
Ray Fix

was bei mir funktioniert hat , ist das Setzen der Suchleiste barTintColor als Farbe für die Navigationsleiste

    searchBar.barTintColor = UIColor.colorWithHexString(hexStr: "479F46")

nach dem Testen wird das Problem in iOS 10.x und 11.x behoben

GIF:

enter image description here

0
DeyaEldeen