2013-09-27 16 views
7

Ho seguito il seguente tutorial per muovere la barra di navigazione verso il basso in modo che non è coperto dalla barra di stato in Xcode 5/iOS7:Fai la barra di navigazione tratto dietro la barra di stato in Xcode 5/iOS7

Status bar and navigation bar issue in IOS7

Ma ora in iOS7 c'è uno spazio vuoto nella parte superiore dove si trova la barra di stato e vorrei che la barra di navigazione riempia anche quest'area

Ad esempio, le app Facebook/twittter/Instagram iOS7 hanno lo sfondo della barra di navigazione anche dietro la barra di stato. Come ottengo questo?

Scusate se non sto facendo chiaro, ma in realtà desiderosi di ottenere questo allineati

Grazie!

+0

si sta utilizzando barra di navigazione personalizzata o built-in? –

risposta

0

Se si vuole allungare un UINavigationBar con un costume background-image dietro l'UIStatusBar in iOS 7 considerare quanto segue:

  1. L'UIStatusBar è trasparente così com'è.
  2. Impostare la barPosition proprietà del UINavigationBar per UIBarPositionTopAttached
  3. I UINavigationBar sfondo-immagini in iOS 7 (se UIBarPositionTopAttached) hanno dimensioni diverse rispetto alle precedenti a iOS 7 e bisogna usarle: ora l'altezza è 64 punti

Nel codice (iPhone SOLO):

// 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]; 

Se si desidera semplicemente passare al colore di sfondo di UINavigationBar si estenderà automaticamente dietro UIStatusBar.

In Code:

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

Si potrebbe voler spiegare come impostare effettivamente il barPosition. – weienw

+0

barPosition è di sola lettura – jjxtra

21

si vuole impostare la barPosition del UINavigationBar.

È possibile farlo in codice:

Lasciate che la vostra ViewController conforme al protocollo UINavigationBarDelegate e implementare positionBar: Metod. (Il protocollo che si ha realmente bisogno è UIBarPositioningDelegate ma UINavigationBarDelegate non estenderla.)

@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 nella Storyboard:

In Impostazioni Identità di UINavigationBar, aggiungere un User Defined runtime attributo con KeyPath = barPosition , Type = numero, e Valore = 3:

Add User Defined Runtime Attribute

+9

GRAZIE MOLTO COSI 'PER INSEGNARMI COSA FA IL MENU DEGLI UTILIZZATORI RUNTIME DEFINITO DALL'UTENTE. QUESTA È LA TERRA CHE BRUCIA PER ME. Non riuscirò mai a creare sottoclassi di un elemento ui per modificare nuovamente una proprietà. – lol

+0

trovare interessante qui, ma non funziona per me. Ricevo sempre il seguente errore: "*** Termina l'applicazione a causa dell'eccezione non rilevata" NSInternalInconsistencyException ", motivo:" Impossibile impostare manualmente il delegato su un UINavigationBar gestito da un controller. "" Se sovrascrivo UINavigationViewController e lo aggiungo lì, lo faccio non ottieni un errore, ma non funziona ... –

+0

@lol Spero solo che tu sia sarcastico, OO non è qualcosa che dovresti prendere l'abitudine. Può rapidamente diventare un incubo di debug. – TheCodingArt

Problemi correlati