Hinzufügen einer Ansicht von oben eine Navigationsleiste

Ich versuche zu erreichen, eine ähnliche Wirkung wie die gesehen in der neuen Nachrichten-app (Safari) auf iOS 7, wobei es ein progress-bar in der navigation bar selbst:

Hinzufügen einer Ansicht von oben eine Navigationsleiste

Habe ich versucht, ein paar Ansätze, und eine gefunden, die fast funktioniert. Ich bin mit einem benutzerdefinierten Unterklasse der UINavigationBar fügt hinzu, dass meine benutzerdefinierten Fortschrittsanzeige als eine Untersicht bei der Initialisierung Zeit. Das funktioniert fast gut, aber die app stürzt ab, wenn ich versuche, um NSLayoutConstraints zu.

Funktionierende code (ohne layout-constraints, also daher nicht anpassen, um die Ausrichtung ändert):

- (void)commonInit
{
    if (!self.progressIndicator) {
        self.progressIndicator = [[ECourseProgressIndicatorView alloc] initWithFrame:CGRectMake(0, self.bounds.size.height - 3, self.bounds.size.width, 3)];
        [self addSubview:self.progressIndicator];
    }
}

Code, den ich erwarten würde, um in der Lage sein zu verwenden (mit NSLayoutConstraints Hinzugefügt), aber Abstürze:

- (void)commonInit
{
    if (!self.progressIndicator) {
        self.progressIndicator = [[ECourseProgressIndicatorView alloc] initWithFrame:CGRectMake(0, self.bounds.size.height - 3, self.bounds.size.width, 3)];
        [self addSubview:self.progressIndicator];

        self.progressIndicator.translatesAutoresizingMaskIntoConstraints = NO;
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-0-[progressIndicator]-0-|" options:0 metrics:nil views:@{@"progressIndicator": self.progressIndicator}]];
        [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[progressIndicator(==3)]-0-|" options:0 metrics:nil views:@{@"progressIndicator": self.progressIndicator}]];
    }
}

Den Fehler, dass ich bei der Ausführung des Codes mit dem layout-constraints in einem Gist hier. Wenn ich nicht translatesAutoresizingMaskIntoConstraints = NO, dann funktioniert der code auch, aber die layout-constraints, die ich angegeben sind, werden ignoriert, zugunsten der autoresizing Maske Einschränkungen.

Kann jemand Einblick geben?

P. S. ich habe anfänglich gedacht, das hinzufügen der Fortschrittsbalken als eine Sicht über die UINavigationBar (also nicht in seiner Hierarchie), aber ich finde keine Informationen, wie die position eines Sicht optisch oberhalb der Navigationsleiste (in der Z co-ordinate Bedingungen, nicht Y).

Hinweis: ich gepostet in den Apple developer Foren, bekam aber keine Antwort.

  • Was bedeutet die crash-log sagen? Es ist meist hilfreich, Ihnen zu sagen, was falsch ist. Auch, eher als Unterklasse der Nav-bar, warum nicht fügen Sie einfach die Statusanzeige wie eine Untersicht der Navigationsleiste?
  • Ich habe es in einem Gist mit inline, da ich nicht überwältigen wollen den thread mit hinein: gist.github.com/obeattie/...
  • In Ihrem ECCourseIndicatorProgressView, Sie passieren nicht zurück YES für +requiresConstraintBasedLayout tun Sie?
  • Ich habe nicht definiert, die Methode. Sollte Ich?
  • Ich habe gerade den code für ECourseProgressIndicatorView auf das Wesentliche hier: gist.github.com/obeattie/6c71a04d2704a0692608#file-gistfile4-m
  • Nicht, es sei denn, Sie erzwingen möchten, dass auto-layout". Und auch du bist als Einstellung für den Rahmen, der Ihre Fortschritte bar. Naughty, naughty, wollen Sie nicht zu berühren, frames, wenn Sie mit "auto-layout", das ist es, was die Zwänge tun sollen. verwenden CGRectZero als den Rahmen, in dem initialiser.
  • Leider ändern, dass die Ergebnisse in die gleichen Fehler (Auto Layout still required after executing -layoutSubviews. EProgressIndicatingNavigationBar's implementation of -layoutSubviews needs to call super.)
  • Die Geltendmachung ist in EProgressIndicatingNavigationBar dem Sie noch nicht gezeigt, code für.
  • Den code in die Frage selbst war von dieser Klasse, aber ich habe den vollständigen code hier: gist.github.com/obeattie/6c71a04d2704a0692608#file-gistfile5-m

InformationsquelleAutor obeattie | 2013-08-30
Schreibe einen Kommentar