Frage

Ich kann keine UISearchBar scheinen, um sich ganz rechts in der Navigationsleiste von ganz links zu positionieren. In der - (void) viewDidLoad Methode, ich habe den folgenden Code:

UISearchBar *sb = [[UISearchBar alloc] initWithFrame:self.tableView.tableHeaderView.frame];
sb.delegate = self;
self.navigationItem.titleView = sb;
[sb sizeToFit];
[sb release];

Wenn Sie erstellen und ausführen, sieht es ganz gut auf den ersten Blick. Allerdings genauer suchen, können Sie es sagen, eine Marge / Raum auf der linken Seite. Dies wäre keine große Sache in dem großen Plan der Dinge sein, aber wenn ich die Suchleiste tippen, um eine Suche zu starten, animiere ich den Knopf in der Ansicht abzubrechen. Da die Suchleiste leicht nach rechts positioniert ist, ist die Animation ruckartig und die Löschtaste fällt vom Ende etwa so: Link-Text

Es scheint, als ob die UINavigationItem wie eine Tabelle mit drei Zellen sind, wo es eine Polsterung auf dem ersten und zum letzten Mal, das ich nicht entfernen kann - auch nicht scheint alle zusammen eine Art und Weise zu ‚merge‘ es zu sein und dann dort legen Sie die Suchleiste. Ich weiß, das Aussehen ist möglich, weil die App Store Suche eine Suchleiste in der Navigationsleiste hat und es geht den ganzen Weg bis zu den Rändern. Wer weiß, wie die Suchleiste bekommen den ganzen Weg zu den Rändern zu gehen, damit mein Dia-in-Taste Animation abbrechen richtig funktioniert?

War es hilfreich?

Lösung 3

Ich glaube, ich fand die Antwort aus - obwohl ich nicht getestet, um zu überprüfen. In der Frage, die ich oben angegebenen, ich habe die folgende Struktur:

Tab-Leiste Controller -> Navigationssteuerung -> View-Controller (n)

Die Suchleiste in Frage war in einem View-Controller, die wiederum in dem Navigationscontroller waren, das Navigation-Controller in der Tab-Leiste ist.

Ich war gerade zufällig die Stanford CS 193P (Frühjahr 2009) Kurse und am Ende der Vorlesung 13, kann die Antwort präsentiert wurde. Alan Cannistraro erklärte, dass die Struktur der Presence App sollte diese Struktur hat:

dieser Struktur http://img143.imageshack.us/img143/6/viewcontrollerstructure .jpg

, wobei die Unteransicht Regler (angrenzend an die Registerleiste Controller) war der Ansicht-Controller, welche die Suchleiste Kontrolle. Er warnte, wenn es nicht in dieser Art und Weise getan, werden Sie „auf Probleme stoßen“. Vielleicht das Problem, das ich konfrontiert? Ich glaube schon.

Andere Tipps

Eigentlich ist es eine wirklich einfache Lösung. Alles was Sie tun müssen, ist eine Null-Breite Ansicht für den zurück Artikel erstellen:

UIView *hackView = [[UIView alloc] initWithFrame:CGRectZero];
UIBarButtonItem *hackItem = [[UIBarButtonItem alloc] initWithCustomView:hackView];      
self.navigationItem.backBarButtonItem = hackItem;
[hackView release];
[hackItem release];

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
[searchBar sizeToFit];
self.navigationItem.titleView = searchBar;
[searchBar release];

Seien Sie sicher, dass dies in Ihrer Loadview-Methode zu tun, nicht init. Ich bin mir nicht sicher, warum das einen Unterschied macht, aber es funktioniert.

Offenbar geht es um Timing. es in Loadview Mit für mich aufgehört zu arbeiten, aber es in viewWillAppear setzen arbeitet (mit einem Scheck, so dass es nur einmal erledigt ist, natürlich). Ich denke, die Idee ist, die Titleview ein, nachdem einige Initialisierung bereits abgeschlossen ist.

Der folgende Code verbirgt die navigationbar nur für diesen UIViewController:

- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

So ist die UISearchBar zu bekommen in dem UINavigationBar Platz zu zeigen, auf dem Root-View-Controller müssen nur Ihre Suchleiste, wo die Navigationsleiste wäre normalerweise!

Vielleicht ein UISearchDisplayController Apfel verwendet für diese irgendwie Dinge zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top