7 Stimmen

iPhone: UINavigationBar mit Schaltflächen - Höhe anpassen

Ich arbeite an einer iPhone-Anwendung, die in beiden Ausrichtungen funktioniert: Hoch- und Querformat.

Ich verwende für einen View und Tableview eingebettet in einen UINavigationController. Die Höhe dieser Navigationsleiste mit ihren Schaltflächen ist entweder: 44px hoch oder 34px quer.

In einer anderen Ansicht habe ich die UINavigationBar selbst erstellt und ich kann den Rahmen auf die richtige Größe einstellen, aber das eingebettete UINavigationItem mit UIBarButtonItem wird nicht verkleinert. Also für die 34 px im Landscape Modus ist dieser Button zu groß und überlappt die Navbar in der Höhe.

Das Komische ist jedoch, dass dies mit identischem Code in anderen Anwendungen funktionierte... ich habe keine Ahnung, was hier nicht der Fall ist.

Gibt es eine Möglichkeit, die Höhe / Position eines UIBarButtonItem anzupassen?

Hier ist das Codeschnipsel:

    navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 34.0f)];
[navBar setBarStyle: UIBarStyleBlackOpaque];

[self addSubview: navBar];

barButton = [[UIBarButtonItem alloc] initWithTitle: NSLocalizedString(@"flip", @"flip") style:UIBarButtonItemStylePlain target:self action:@selector(flip)];

item = [[UINavigationItem alloc] initWithTitle: NSLocalizedString(@"Translation", @"Translation Tab Bar Title")];
[item setRightBarButtonItem: barButton];
[navBar pushNavigationItem:item animated:NO];   

Alt-Text http://labs.kiesl.eu/images/navbar.png

Gracias

Tom

7voto

crashtesttommy Punkte 429

Ich habe es herausgefunden: Die Höhe der Navigationsleiste muss 32 px betragen! Bei 33 oder 34 px stimmt die Ausrichtung nicht mehr.

4voto

lambmj Punkte 1833

Hier ist der Code, den ich auf der Grundlage der Antwort von crashtesttommy geschrieben habe:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}

- (void) correctNavBarHeightForOrientation:(UIInterfaceOrientation)orientation {
    // This is only needed in on the iPhone, since this is a universal app, check that first.
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){
        if (UIInterfaceOrientationIsLandscape(orientation)) {
            self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 32.0f);
        } else {
            self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 44.0f);
        }
    }  
}

- (void) viewWillAppear:(BOOL)animated {
    [self correctNavBarHeightForOrientation:[UIApplication sharedApplication].statusBarOrientation];
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self correctNavBarHeightForOrientation:toInterfaceOrientation];
}

0voto

Sixten Otto Punkte 14771

Erstellen Sie alternative Bilder, und ändern Sie in den Methoden des View-Controllers, die für die Animation der Drehung zuständig sind, die Bilder in den Schaltflächen der Leiste. Oder Sie könnten wahrscheinlich eine UIImageView als benutzerdefinierte Ansicht in Ihrem Artikel ein, und legen Sie den Inhaltsmodus so fest, dass das Bild verkleinert wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X