6

Mam problem z moim paskiem nawigacji, UIBarButtonItem nie jest poprawnie wyrównany w pionie. Nie wiem dlaczego, ponieważ używam prostego UIBarButtonItem, a nie niestandardowego widoku. Zobacz mój kod poniżej i dziękuję za pomoc!Przycisk paska Pozycja niepoprawnie wyrównana

UIBarButtonItem *newGameItem = [[UIBarButtonItem alloc] initWithTitle:@"New Game" style:UIBarButtonItemStyleDone target:self action:@selector(newGame)]; 
self.navigationItem.rightBarButtonItem = newGameItem; 

Screenshot navigation bar issue

+0

To nie wygląda jak domyślna czcionka dla standardowego UIBarButtonItem. Czy modyfikujesz jakieś cechy czcionki barbutton? Może z UIAppearance? – hgwhittle

+0

Zastanawiasz się, dlaczego "nowa gra" jest nieco ** poniżej ** tytułu "forum"? – CrimsonChris

+0

Tak, używam Avenir Next, ale używam tej czcionki w innej aplikacji i nie ma problemu z paskiem nawigacji. [[Wygląd UIBarButtonItem] setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor whiteColor], NSFontAttributeName: [UIFont fontWithName: @ "Avenir Next" size: 18.0]} forState: UIControlStateNormal]; [[UINavigationBear appearance] setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor whiteColor], NSFontAttributeName: [UIFont fontWithName: @ "AvenirNext-DemiBold" rozmiar: 18.0]}]; –

Odpowiedz

6

W rzeczywistości istnieją dwa sposoby wyrównania przycisków paska. Spróbuj wyregulować położenie napisów przycisk z tym:

[self.navigationItem.rightBarButtonItem setTitlePositionAdjustment:UIOffsetMake(-10, -10) 
                forBarMetrics:UIBarMetricsDefault]; 

-10 -10 - tak na przykład

LUB

można zainicjować swoją newGameItem ze zwyczajem UIButton. Przycisk niestandardowy jest podklasą UIButton z tej metody zamienione na

- (UIEdgeInsets)alignmentRectInsets { 
    return UIEdgeInsetsMake(0, -10, 0, 15.0f); // here you can play with values to align your button properly 
} 

następnie zainicjować newGameItem

CustomBarButton *button = [CustomBarButton buttonWithType:UIButtonTypeCustom]; 
[button setTitle:@"New game" forState:UIControlStateNormal]; 
button.frame = CGRectMake (0, 0, 60, 40); 
[button addTarget:self action:@selector(newGame) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *newGameItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
self.navigationItem.rightBarButtonItem = newGameItem; 
+3

Pierwsze rozwiązanie niestety nie działa. – micnguyen

+0

Drugie rozwiązanie rzeczywiście działa, choć nie jest tak eleganckie. Dzięki! – micnguyen

0

Niestety, nie ma wiele można zrobić UIBarButtonItem pionowe odstępy. Sądzę, że będziesz musiał albo powiększyć rozmiar czcionki swojego tytułu na UINavigationBar (możesz to zrobić również z UIAppearance), albo zmniejszyć rozmiar czcionki twojego UIBarButtonItem.

1

miałem ten sam problem z przyciskiem po lewej stronie, byłem w stanie go naprawić w Xcode 6.3.1: wybierz przycisk (element z przyciskiem paska) Prawa kolumna z zakładką "linijka" obraz wstawki Najwyższa wartość: -54 zamiast 0. Pamiętaj, że: moje urządzenie to iPhone4 z iOS 7, przycisk był idealnie na miejscu w Xcode i niewłaściwie umieszczona na urządzeniu, teraz jest na urządzeniu i niewłaściwie umieszczona w Xcode

1

Miałem podobny problem: używamy czcionek niestandardowych przez UIAppearance zarówno dla tytułów nawigacyjnych, jak i elementów z przyciskami paska, aw niektórych przypadkach właściwy element był niedopasowany pionowo.

Mogłem łatwo naprawić niewspółosiowość, używając [self.navigationItem setRightBarButtonItem:rightItem animated:YES] zamiast ustawiacza właściwości.