Ho cercato di realizzare la stessa cosa. Il metodo che sto usando per fare questo si basa sui seguenti concetti:
- Un'immagine di sfondo con un'altezza di 64 punti riempirà sia il UINavigationBar e l'UIStatusBar.
- Un'immagine di sfondo con un'altezza di 44 punti riempirà UINavigationBar e lascerà il UIStatusBar nero.
- È possibile aggiungere una vista secondaria nella parte superiore della vista corrente di navigazione del controllore e si posizionerà al di sotto di UIStatusBar.
Quindi, in primo luogo, è necessario creare due immagini con il vostro look UINavigationBar desiderata:
Un'immagine 640x128px per coprire barra di navigazione e la barra di stato (ImageA)
E un'immagine 640x88px per coprire la barra di navigazione ma lasciare la barra di stato nera (ImageB).
Nel metodo application:didFinishLaunchingWithOptions:
, impostare lo sfondo del vostro UINavigationBar con ImageA con [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"ImageA.png"] forBarMetrics:UIBarMetricsDefault];
Quando il menu laterale inizia ad aprirsi, si sta andando a voler cambiare l'UINavigationBar in modo che utilizza ImageB e crea una vista che verrà aggiunta sotto UIStatusBar. Ecco alcuni esempi di codice per fare proprio questo:
// Add a property for your "temporary status bar" view
@property (nonatomic, strong) UIView *temporaryStatusBar;
E nel codice in cui il menu laterale inizia ad aprire:
// Create a temporary status bar overlay
self.temporaryStatusBar = [[UIView alloc] initWithFrame:[[UIApplication sharedApplication] statusBarFrame]];
self.temporaryStatusBar.backgroundColor = [UIColor yourColor];
[self.navigationController.view addSubview:self.temporaryStatusBar];
// Update both the current display of the navigationBar and the default appearance values
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"imageB.png"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"imageB.png"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setNeedsDisplay];
Come il menu laterale anima aperta, o come l'utente pentole menu , tutto ciò che devi fare è regolare il livello alfa della sovrapposizione di UIStatusBar. Quando il menu laterale è completamente aperto, UINavigationBar dovrebbe avere ImageB come immagine di sfondo e l'overlay UIStatusBar dovrebbe avere un alfa di 0.Quando si chiude il menu laterale, è necessario sostituire lo sfondo UINavigationBar con ImageA e rimuovere l'overlay UIStatusBar.
Fatemi sapere se questo funziona per voi!
fonte
2013-09-26 20:15:18
Questa scala su iPad in cui lo schermo è più ampio sia in verticale che in orizzontale? – Aaron
@Aaron Non sono sicuro - non l'ho provato su iPad. Immagino che si riduca bene, ma potresti dover fornire immagini separate per l'iPad o giocare con il ridimensionamento dell'immagine in modo che tocchi. –
Come sai che il menu laterale è selezionato e sta per essere aperto? È un metodo per questo in JASidePanels? tnx – Maziyar