Frage

Ich mache wahrscheinlich etwas falsch hier, weil das sieht ein bisschen dumm.
Ich gründe eine eigene Titleview (in Form einer UILabel) auf meinem UINavigationController auf, die gleich auf jeder Seite ist. Um dies zu erleichtern, habe ich eine Funktion in meinem AppDelegate korrekt erstellt das Etikett angezeigt werden soll. Ich rufe Sie dann diese Funktion auf irgendwelchen Subviews kurz nachdem ich es auf die Navigationsstapel schieben.
Hier ist der Code (die wahrscheinlich mehr Sinn als meine Erklärung macht):

//In MyAppDelegate.m:
- (void)showTitleForNavigationController:(UINavigationController*) navController {
    UILabel *label = [[UILabel alloc] init];
    // set up label attributes
    // ...
    [label sizeToFit]; //without this line my label won't show at all
    [navController.navigationBar.topItem setTitleView:label];
    [label release];
}

// In SomeViewController.m, when pushing another controller onto the stack:
    UIViewController *otherViewController = //initialize other view controller;
    [self.navigationController pushViewController:otherViewController animated:YES];
    [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] showTitleForNavigationController:otherViewController.navigationController];

Mein Problem ist, dass, wenn ich die nächsten View-Controller auf den Stapel schieben, und die neuen Controller gleiten über glatt, für die gesamte Dauer der Animation der Label-Sticks nach links oben, bevor sie schließlich einrasten lassen, nachdem die Animation beendet ist . Es sieht wirklich seltsam und hässlich. Wie kann ich das Etikett richtig so eingerichtet, dass sie sanft von der nächsten Ansicht gleiten? Sicherlich ist es etwas einfach, dass ich fehle ...

War es hilfreich?

Lösung 2

Was ich am Ende dabei wurde ein Bild mit dem als Hintergrund für den Header enthielt Text verwenden, so anstatt Animieren reibungslos wie ich ursprünglich wollte, es ist überhaupt nicht Animieren.
In Anbetracht es ist überall die gleiche Position, es ist nicht so große Sache aber.

Andere Tipps

Eine sehr späte Antwort auf diese Frage, aber ich lief nur in das gleiche Problem und fand einen anderen Weg, es zu lösen, ohne ein Bild zu verwenden. Dachte, ich würde meine Lösung teilen, wie es jemand helfen könnte.

In meinem Fall Ich gründe eine benutzerdefinierte UILabel die Titleview zu sein, und ich erkennen, dass nur dann, wenn ich die Eigenschaft Titleview in der viewDidLoad Methode festgelegt, beseelt es richtig. In einigen Fällen jedoch, ich habe wusste nicht den Titel noch in meinem viewDidLoad (in einigen Fällen ich brauchte einen Titel von einer HTTP-Anforderung zum Beispiel verwenden). Also, meine Lösung für solche Fälle war die Titleview-Eigenschaft auf meine custom mit Text zu setzen @“" in viewDidLoad, und wenn ich die realen Titel habe ich nur den Text Eigenschaft meines benutzerdefiniertes Etiketts verändert.

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view from its nib.

   //set temporary title, the MBMUINavigationBarTitleView is a UIView subclass whose  viewWithTitle method returns an autoreleased UIlabel with my custom settings, custom font etc.
   self.navigationItem.titleView = [MBMUINavigationBarTitleView viewWithTitle:@" "];
}

//somewhere later, when I have the real title
UILabel* titleLabel = (UILabel*)self.navigationItem.titleView;
[titleLabel setText:theRealTitle];

war ich in einer ähnlichen Situation wie Ylva, eine Instanz einer benutzerdefinierten Textklasse für die UINavigationItem's titleView Eigenschaft. Allerdings fand ich es in viewDidLoad Konfiguration nicht die Animation Glitch lösen.

Meine Abhilfe für das Problem war, zu warten, bis der View-Controller in Frage vom Stapel des Navigation-Controller knallte wurde, und an diesem Punkt die UINavigationItem's benutzerdefinierte titleView zu entfernen, so braucht es überhaupt nicht animierte werden.

Als meine UINavigationController Unterklasse der popViewControllerAnimated: Nachricht empfängt, kopiere ich den Titeltext aus meinem benutzerdefinierten Textfeld (UINavigationItem's titleView) in die UINavigationItem's title Eigenschaft und stellen Sie die titleView Eigenschaft auf null. Dann geht die UINavigationController voraus und Pops aus den View-Controller und nur das Standard-Navigationsleiste Titellabel animiert wird (nicht meine eigenen Titel), Glitch frei.

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