2009-12-01 22 views
7

Ich habe eine Unterklasse von UIViewController, die eine UIView behandelt. Der Viewcontroller wird modal dargestellt (er rutscht vom unteren Bildschirmrand nach oben). Oben in der Ansicht habe ich eine Navigationsleiste hinzugefügt. Beachten Sie, dass diese Leiste nicht von einem Navigationscontroller gehandhabt wird.Ändern der UINavigationBar bei Rotation

Ich möchte, dass die Navigationsleiste in der Höhe verkleinert wird, wenn die Ansicht in Querformat gedreht wird (ähnlich wie es sich verhält, wenn es von einem UINavigationController gehandhabt wird). Allerdings kann ich seine Autoresizing-Maske nicht auf flexible Höhe in IB einstellen, und dies im Code bewirkt, dass die Navigationsleiste vollständig verschwindet.

Gibt es eine Möglichkeit, dies zu tun? Wie macht es der UINavigationController?

P.S. Ich würde es vorziehen, nicht auf eine skalierende Transformation zurückgreifen zu müssen, da dies den Text im Titel durcheinander bringen würde.

EDIT: Ich löste es mit ein wenig Hilfe, lesen Sie die Antwort unten veröffentlicht.

Antwort

1

Ich fand die Lösung, und im Nachhinein fühle ich mich ziemlich dumm. Ich musste einfach einen flexiblen unteren Rand in die Autoresize-Maske der Navbar einfügen. Der Kredit ist aufgrund Benutzer RayNewbie in diesem Thread, was mich zu der Lösung zeigte:

http://discussions.apple.com/thread.jspa?messageID=8295525

+0

Hallo, hast du Knöpfe auf der Navbar? Weil ich das gleiche Problem habe und, wenn ich einen flexiblen unteren Rand in die Autorisierungsmaske der Navbar einfüge, ändert sich die Navigationsleiste, aber die Schaltflächen nicht. – Sefran2

+0

Stellen Sie sicher, dass Sie navBar.autoresizesSubviews = YES; hinzufügen, und Sie müssen möglicherweise auch die Autoresizing-Masken für Ihre Navigationsleisten-Schaltflächen festlegen –

+1

Würden Sie Ihre Lösung posten. Der von Ihnen angegebene Link ist defekt. – DCorrigan

5

Anstatt die Autorisierungsmaske zu setzen, sollten Sie nicht nur die aktuelle Ausrichtung in viewWillAppear, sondern auch in didRotateFromInterfaceOrientation überprüfen und den entsprechenden Rahmen festlegen.

- (void) updateNavBar { 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    if ((UIInterfaceOrientationLandscapeLeft == orientation) || 
     (UIInterfaceOrientationLandscapeRight == orientation)) { 
     myNavBar.frame = CGRectMake(0, 0, 480, 34); 
    } else { 
     myNavBar.frame = CGRectMake(0, 0, 320, 44); 
    } 
} 
- (void) viewWillAppear { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [self updateNavBar]; 
    // ... SNIP ... 
} 
+0

Ich habe es ausprobiert, aber es hat nicht so verhalten, wie ich es wollte. Genauer gesagt, die Elemente der Balkenschaltfläche und der Titel wurden nicht skaliert, so dass der obere Bildschirm nicht angezeigt wurde. Auch die Navigationsleiste selbst wurde nicht skaliert, daher war der Farbverlauf deaktiviert. Ich werde versuchen, die Unteransicht manuell zu skalieren und zu sehen, ob es funktioniert ... –

+0

Ich habe versucht, Transformationen verschiedener Art in der Unteransicht zu verwenden, aber ich konnte es nicht gut aussehen lassen. –

Verwandte Themen