2012-03-13 6 views
6

Kiedy wciskam nowy tableViewController z ekranu, począwszy od aplikacji na iOS (wciskam ustawienia ekranu) tytuł w UINavigationController dostaje spięte aż zakończy animację:UINavigationBar tytuł zostanie obcięty przy zmianie viewControllers

enter image description here

to jest NavigationBar w połowie animacji, a tuż przed wykończenia animacji, wygląda to tak:

enter image description here

Po rano oment, tytuł zmienia się poprawnie na "Ustawienia". To nie jest wielka sprawa, ale możesz sobie wyobrazić, jak bardzo to przeszkadza programistycznemu programującemu OCD! :)

Oto kod w tableViewController gdzie ustawić tytuł, nic specjalnego:

- (id)initWithStyle:(UITableViewStyle)style 
{ 
    self = [super initWithStyle:style]; 
    if (self) { 
     self.title = @"Settings"; 
     // Hide tabBar when pushed so you cannot switch from the Settings 
     self.hidesBottomBarWhenPushed = YES; 
     self.tableView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"bg.png"]]; 
    } 
    return self; 
} 
+2

ja też mam ten przykry problem. W moim przypadku używam niestandardowej czcionki dla tytułu nawigacji i ustawiając je za pomocą setTitleTextAttributes: forState :, to się nie dzieje, jeśli tego nie zmienię. Również ten "problem" wydaje się być naprawiony w iOS6. Chciałbym znaleźć pracę, dlatego zacząłem zdobyć nagrodę, aby zwrócić na siebie uwagę ... –

+0

Czy umieścisz bg.png na urządzeniu Dropbox lub podobnym? –

+0

Czy dokonano subklasyzacji następujących elementów: 'UINavigationBar',' UINavigationItem', 'UINavigationController'? – Ander

Odpowiedz

1

Jestem trochę spóźniony z odpowiedzią, ale wyśledziłem problem na iOS 5 .. Kiedy używasz proxy UIAppearance na UINavigationBar, wydaje się, że musisz jawnie ustawić rozmiar czcionki, zamiast używać 0.0, aby pozwolić na auto ustaw na podstawie orientacji.

udało mi się rozwiązać ten problem przez instacji UINavigationController i wprowadzenie następującego kodu:

- (void)viewWillLayoutSubviews { 
    [super viewWillLayoutSubviews]; 

    // You should include a conditional here to check for iOS 5, so iOS 6 doesn't have to do any additional work 
    self.navigationBar.titleTextAttributes = @{ 
     UITextAttributeFont:[UIFont boldSystemFontOfSize:UIInterfaceOrientationIsPortrait(self.interfaceOrientation) || IS_IPAD ? 20.0f : 16.0f], 
     UITextAttributeTextColor:[UIColor whiteColor], 
     UITextAttributeTextShadowColor:[UIColor colorWithWhite:0.0f alpha:0.5f], 
     UITextAttributeTextShadowOffset:[NSValue valueWithUIOffset:UIOffsetMake(0.0f, -1.0f)] 
    }; 
} 
+0

Tak, wprowadzenie rozmiaru czcionki do zakodowanej wartości rozwiązało problem. To był poprzedni kod: '[[UINavigationBar wygląd] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName: @ "Akzidenz-Grotesk BQ" Rozmiar: 0.0] UITextAttributeFont Nil]];' i po prostu zmieniono rozmiar czcionki o stałej wartości: '[[UINavigationBar wygląd] setTitleTextAttributes: [dictionaryWithObjectsAndKeys NSDictionary: [UIFont fontWithName: @ "Akzidenz-Grotesk BQ" rozmiar: 22.0], UITextAttributeFont, nil]];' Works jak teraz urok. Dzięki! –

0

spróbuj ustawić

self.navigationItem.title = self.title; 

w metodzie viewWillAppear

0

spróbować

- (void)viewWillAppear:(BOOL)animated { 

    self.title = @"Settings"; 
} 
+1

Na marginesie, za [dokumentację] (http://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instm/UIViewController/viewWillAppear :), "[i] f nadpisujesz tę metodę, musisz zadzwonić super w pewnym momencie swojej implementacji." – Rob