7

Ich arbeite an einer iPhone-Anwendung, die in beiden Orientierungen funktioniert: Hochformat und Querformat.iPhone: UINavigationBar mit Tasten - die Höhe anpassen

Ich verwende für eine Ansicht und Tabellenansicht in einem UINavigationController eingebettet. Die Höhe dieser Navigationsleiste mit ihren Schaltflächen ist entweder: 44px Hochformat oder 34px Querformat.

Innerhalb einer anderen Ansicht habe ich die UINavigationBar von mir selbst erstellt und ich kann den Rahmen für die richtige Größe festlegen, aber das eingebettete UINavigationItem mit UIBarButtonItem wird nicht verkleinert. Für die 34 px im Querformat-Modus ist diese Schaltfläche also zu groß und überlappt die Navigationsleiste in der Höhe.

Das lustige ist aber, dass das mit identischem Code in anderen Apps funktioniert ... habe keine Ahnung was es hier nicht gibt.

Gibt es trotzdem die Höhe/Position eines UIBarButtonItem anzupassen? Hier

ist der Code-Schnipsel:

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

Dank

Tom

Antwort

0

alternative Bilder erstellen und in den View-Controller-Methoden, die die Drehgriff Animieren, ändert sich die Bilder in der Leiste Schaltflächenelemente. Oder Sie könnten wahrscheinlich eine UIImageView als benutzerdefinierte Ansicht in Ihrem Artikel verwenden und den Inhaltsmodus festlegen, um das Bild zu verkleinern.

7

Ich habe es herausgefunden: Die Höhe der Navigationsleiste muss 32 px betragen! Mit 33 oder 34 px wird die Ausrichtung verschraubt.

+0

Sehr hilfreich, danke. 32px war der Schlüssel. Ich benutzte 34px und es hat nicht funktioniert. – lambmj

4

Hier ist der Code, den ich auf crashtesttommy Antwort basiert schrieb:

- (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]; 
} 
Verwandte Themen