7

Pracuję nad aplikacją na iPhone'a, która działa zarówno w orientacji: pionowej i poziomej.iPhone: UINavigationBar z przyciskami - dostosuj wysokość

Używam dla jednego widoku i tableview osadzone w UINavigationController. Wysokość tego paska nawigacji z jego przyciskami to: portret 44 pikseli lub krajobraz 34 pikseli.

W innym widoku samodzielnie utworzyłem pasek UINavigationBar i mogę ustawić ramkę na prawidłowy rozmiar, ale osadzony element UINavigationItem z UIBarButtonItem nie zmniejsza się. Tak więc dla 34 px w trybie poziomym ten przycisk jest duży i zachodzi na wysokość paska nawigacyjnego.

Zabawne jest jednak to, że działało to z identycznym kodem w innych aplikacjach ... nie mam pojęcia, którego tu nie ma.

Czy mimo to można dostosować wysokość/położenie elementu UIBarButtonItem?

Oto fragment kodu:

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

Dzięki

Tom

Odpowiedz

0

Tworzenie alternatywnych obrazów oraz w metodach widok kontrolerów, które zajmują animowanie obrót, zmianę obrazy w elementach przycisku paska. Lub prawdopodobnie możesz użyć UIImageView jako niestandardowego widoku w swoim elemencie i ustawić tryb zawartości, aby skalować obraz w dół.

7

Wyjaśniłem: Wysokość paska nawigacji musi wynosić 32 px! Przy 33 lub 34 px wyrównanie śrubuje.

+0

bardzo pomocny, dzięki. Kluczem było 32px. Używałem 34 pikseli i to nie działało. – lambmj

4

Oto kod napisałem na podstawie odpowiedzi crashtesttommy za:

- (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]; 
} 
Powiązane problemy