2013-08-20 14 views
5

Próbuję mieć dwa UILabels w moim pasku nawigacji, a nie tylko jeden.Tytuł i podtytuł ios w pasku nawigacyjnym wyśrodkowany

Śledziłem ten link, aby mieć informacje na temat, jak to zrobić: iPhone Title and Subtitle in Navigation Bar

to działa dobrze, ale nie mogę dostać moje teksty być odpowiednio wyśrodkowany. Jest on wyśrodkowany między przyciskami, ale domyślne zachowanie tytułu polega na tym, aby samemu wyśrodkować czas.

enter image description here

miałem Posłuchaj, to samo pytanie, ale nie ma odpowiedzi: UINavigationBar TitleView with subtitle

Czego mi brakuje? Oto mój kod:

CGRect headerTitleSubtitleFrame = CGRectMake(0, 0, 200, 44); 
UIView* _headerTitleSubtitleView = [[UILabel alloc] initWithFrame:headerTitleSubtitleFrame]; 
_headerTitleSubtitleView.backgroundColor = [UIColor clearColor]; 
_headerTitleSubtitleView.autoresizesSubviews = NO; 

CGRect titleFrame = CGRectMake(0, 2, 200, 24); 
UILabel *titleView = [[UILabel alloc] initWithFrame:titleFrame]; 
titleView.backgroundColor = [UIColor clearColor]; 
titleView.font = [UIFont boldSystemFontOfSize:20]; 
titleView.textAlignment = NSTextAlignmentCenter; 
titleView.textColor = [UIColor whiteColor]; 
titleView.shadowColor = [UIColor darkGrayColor]; 
titleView.shadowOffset = CGSizeMake(0, -1); 
titleView.text = @"Title"; 
titleView.adjustsFontSizeToFitWidth = YES; 
[_headerTitleSubtitleView addSubview:titleView]; 

CGRect subtitleFrame = CGRectMake(0, 24, 200, 44-24); 
UILabel *subtitleView = [[UILabel alloc] initWithFrame:subtitleFrame]; 
subtitleView.backgroundColor = [UIColor clearColor]; 
subtitleView.font = [UIFont boldSystemFontOfSize:13]; 
subtitleView.textAlignment = NSTextAlignmentCenter; 
subtitleView.textColor = [UIColor whiteColor]; 
subtitleView.shadowColor = [UIColor darkGrayColor]; 
subtitleView.shadowOffset = CGSizeMake(0, -1); 
subtitleView.text = @"Subtitle"; 
subtitleView.adjustsFontSizeToFitWidth = YES; 
[_headerTitleSubtitleView addSubview:subtitleView]; 

self.navigationItem.titleView = _headerTitleSubtitleView; 

Odpowiedz

10

Powinieneś dostosować szerokość obu ramek. Powinien być poniżej 200. spróbuj tego.

CGRect titleFrame = CGRectMake(0, 2, 160, 24); 
CGRect subtitleFrame = CGRectMake(0, 24, 160, 44-24); 

Edytuj: Twój przycisk po lewej jest szerszy, a widok tytułowy przesunięty w prawo.

Proszę spojrzeć obraz o szerokości 200px enter image description here

a obraz o szerokości 160px enter image description here

Proponuję, aby dostosować szerokość titleview i odpowiednio oznakować.

Aby uzyskać więcej informacji na temat szerokości pasków, należy zapoznać się z dyskusją tutaj. SO Post 1.

SO Post 2.

+0

Wielkie dzięki! Teraz działa. Ale nie rozumiem tego. Dlaczego nie jest wyśrodkowany, gdy podane wymiary są wyższe? – user2700551

+0

Nie działa dla wszystkich różnych przypadków. Mimo że działa na ten przycisk Wstecz, mój przycisk Wstecz po lewej stronie może być szerszy, a tytuł przesunięty w prawo. – user2700551

+0

Zawsze tekst zostanie wyśrodkowany na etykiecie. więc należy odpowiednio dostosować szerokość etykiety. jeśli ustawisz kolor tła dla etykiety do testowania, otrzymasz jasny pomysł. Również będzie to bardzo znaczące, jeśli zaakceptujesz i zareklamujesz odpowiedź, ponieważ pomogło ci to. –

1

może lubisz tę właściwość w klasie UINavigationItem.

@property (nonatmic,copy) NSString *prompt

To eleganckie.

+3

Ale to zwiększa wysokość całego navbara. I jest na szczycie tytułu, a nie pod nim. –

Powiązane problemy