2013-09-27 7 views
7

Śledzę następujące samouczek do przenieść pasek nawigacyjny w dół, więc nie jest objęte pasku stanu w Xcode 5/ios7:Marka Pasek nawigacyjny odcinek za pasku stanu w Xcode 5/iOS7

Status bar and navigation bar issue in IOS7

Ale teraz w iOS7 na górze jest puste miejsce, w którym znajdowałby się pasek stanu i chciałbym, aby pasek nawigacji również wypełniał ten obszar

Na przykład aplikacje Facebook/twittter/Instagram iOS7 mają tło paska nawigacji również za paskiem stanu. Jak to osiągnąć?

Niestety jeśli Nie jestem jasne, ale bardzo chętnie się tym sortowane

Dziękujemy!

+0

używasz niestandardowego paska nawigacyjnego lub wbudowanej? –

Odpowiedz

0

Jeśli chcesz rozciągnąć UINavigationBar z niestandardowego tła wizerunku za UIStatusBar w iOS 7 rozważyć następujące kwestie:

  1. UIStatusBar jest przejrzyste, jak to jest.
  2. Ustaw barPosition własność UINavigationBar do UIBarPositionTopAttached
  3. The UINavigationBar tła obrazów w iOS 7 (jeśli UIBarPositionTopAttached) mają różne wymiary niż poprzedni iOS 7 i trzeba z nich korzystać: teraz wysokość wynosi 64 punktów

W kodzie (tylko iPhone):

// Image needs 64 points height 
NSString* navBarPortraitBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarPortraitBackground" ofType:@"png"]; 
NSString* navBarLandscapeBackgroundPath; 


if(UIScreen.mainScreen.bounds.size.height == 568){ 

    // Image needs 64 points height 
    navBarLandscapeBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarWideLandscapeBackground" ofType:@"png"]; 

} else { 

    // Image needs 64 points height 
    navBarLandscapeBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarLandscapeBackground" ofType:@"png"]; 

} 


[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithContentsOfFile:navBarPortraitBackgroundPath] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithContentsOfFile:navBarLandscapeBackgroundPath] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsLandscapePhone]; 

Jeśli chcesz zmienić kolor tła paska UINavigationBar, automatycznie rozszerzy się on za paskiem UIStatusBar.

w kodzie:

[UINavigationBar appearance].barTintColor = [UIColor redColor]; 
+6

Możesz wyjaśnić, jak właściwie ustawić barPosition. – weienw

+0

barPosition jest tylko do odczytu – jjxtra

21

Ty chcesz ustawić barPosition z UINavigationBar.

Można to zrobić w kodzie:

Niech ViewController zgodne z protokołem UINavigationBarDelegate i wdrożenie positionBar: Metod. (Protokół że naprawdę potrzebne jest UIBarPositioningDelegate ale UINavigationBarDelegate ma przedłużyć go.)

@interface SampleViewController() <UINavigationBarDelegate> 
@property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar; 
@end 

@implementation SampleViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _navigationBar.delegate = self; 
} 

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { 
    return UIBarPositionTopAttached; 
} 
@end 

OR w Storyboard:

W Identity Inspektora UINavigationBar, dodać użytkownika Defined wykonania Atrybut z KeyPath = barPosition , Type = liczba i wartość = 3:

Add User Defined Runtime Attribute

+9

DZIĘKUJEMY TAK DUŻO ZA NAUCZANIE MNIE CO ZROBIŁ UŻYTKOWNIK MENU OKREŚLONE PRZY UŻYCIU RUNTIME ATTRIBUTES. TO JEST NA ZIEMI ŚCIGANIE DLA MNIE. Nigdy nie będę podklasy elementu interfejsu, aby ponownie zmienić jedną właściwość. – lol

+0

ciekawe znaleźć tutaj, ale to nie działa dla mnie. Zawsze pojawia się następujący błąd: "*** Kończenie aplikacji z powodu nieprzechwyconego wyjątku" NSInternalInconsistencyException ", powód:" Nie można ręcznie ustawić delegata na UINavigationBar zarządzanym przez kontroler. "" Jeśli zastąpię UINavigationViewController i dodaję go tam, robię nie dostaję błędu, ale to nie działa ... –

+0

@Lol Mam tylko nadzieję, że jesteś sarkastyczny, OO to nie jest coś, co powinieneś mieć w zwyczaju. Może szybko stać się koszmarem debugowania. – TheCodingArt

Powiązane problemy