Domanda

Io sono l'aggiunta uno sfondo personalizzato per il mio UINavigationBar. Funziona bene fino a quando il telefono è in modalità verticale. Appena posso passare alla modalità orizzontale, la metà della barra appare blu (il colore predefinito barra di navigazione) e la metà di esso ha la mia immagine

Come posso allungare l'immagine per la modalità orizzontale e rendere piccolo di nuovo per la modalità portrait?

Grazie

Soluzione
Incase qualcuno è alla ricerca di una risposta a come aggiungere un'immagine alla barra di navigazione - qui va

UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, 480.0, 44.0)];
[imgView setImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"navbar_landscape" ofType:@"png"]]];
[navigationController.navigationBar addSubview:imgView];
[imgView release];
È stato utile?

Soluzione

Probabilmente, è necessario impostare l'autoresizingMask del tuo background visualizzazione dell'immagine; provare a utilizzare UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

Altri suggerimenti

In entrambe le modalità orientamento dello schermo è molto meglio usare

[navigationController.navigationBar insertSubview:imgView atIndex:0];

Questo mette visualizzazione dell'immagine in tutte le altre viste e tutti gli elementi della barra di navigazione di default (titolo, pulsanti standard) funziona OK.

Dopo un po 'di ricerca e di pista ed errore, ho trovato un lavoro in giro, che non sostituirà la barra di navigazione quando si entra in modalità di riproduzione dei filmati. Hopeefully ciò non causa problemi con l'approvazione app, ma sulla base di questo post, penso che dovrebbe andare bene:

http://developer.apple.com/iphone/library /qa/qa2009/qa1637.html

@implementation UINavigationBar (UINavigationBarCategory)

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if([self isMemberOfClass: [UINavigationBar class]]){
        UIImage *image = [UIImage imageNamed:@"navBarBackground.png"];
        CGContextClip(ctx);
        CGContextTranslateCTM(ctx, 0, image.size.height);
        CGContextScaleCTM(ctx, 1.0, -1.0);
        CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
    }else{
        [super drawLayer:layer inContext:ctx];
    }
}

@end

La soluzione Ben ha fatto risolvere il problema, ma si estende l'immagine in modalità orizzontale. Ho finito per creare due uno immagini- per il paesaggio e l'altro per la modalità portrait. Ho poi aggiunto il codice in shouldAutoRotate per cambiare l'immagine barra di navigazione in base all'orientamento

È possibile modificare l'immagine per entrambi gli orientamenti verticale e orizzontale, fornendo immagini differenti per i diversi orientamenti controllando le dimensioni del fotogramma di tale istanza bar UINavigation:

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
    if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
        return;
    }

    UIImage *image = (self.frame.size.width > 320) ?
                        [UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];
    CGContextClip(context);
    CGContextTranslateCTM(context, 0, image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}

questo Xcode demo completa progetto sulla personalizzazione dell'aspetto UINavigationBar potrebbe essere utile. Esso comprende anche @ 2x versioni di immagini di sfondo per supportare display Retina di iPhone 4 dispositivi.

Prova il metodo più semplice di [UIImage imageNamed:@"navbar_landscape.png"] dal momento che un elemento dell'interfaccia utente è esattamente ciò che imageNamed:. è destinato, come dimostra ljonesATL

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top