Frage

Ich füge einen benutzerdefinierten Hintergrund für meine UINavigationBar. Es funktioniert gut, solange das Telefon im Portrait-Modus ist. Sobald ich in das Querformat wechseln, die Hälfte der Balken erscheint blau (die Standard navbar Farbe) und die Hälfte davon hat mein Bild

Wie kann ich das Bild für Landscape-Modus strecken und sie wieder klein für Portrait-Modus machen?

Danke

Lösung
Incase jemand nach einer Antwort suchen, wie ein Bild zu Navigationsleiste hinzufügen - hier geht

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];
War es hilfreich?

Lösung

Sie müssen wahrscheinlich die autoresizingMask des Hintergrundbildes Ansicht setzen; versuchen Sie es mit UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight

Andere Tipps

In beide Bildschirmausrichtung Modi ist es viel besser zu nutzen

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

Dies setzt Bildansicht unter allen anderen Ansichten und all Standard-Navigationsleiste Elementen (Titel, Standard-Tasten) OK arbeiten.

Nachdem ein wenig Forschung und Versuch und Irrtum, ich eine Arbeit um gefunden, dass die Navigationsleiste nicht ersetzen, wenn Sie den Filmwiedergabe-Modus. Hopeefully bedeutet dies nicht Probleme mit App Genehmigung verursachen, aber zu diesem Beitrag basierte, ich denke, es sollte in Ordnung sein:

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

Die Lösung Ben gab tat das Problem lösen, aber es erstreckt sich das Bild im Querformat. Ich landete die Schaffung von zwei Bilder- eines für Landschaft und andere für den Portrait-Modus. Ich fügte dann Code in shouldAutoRotate das navbar Bild auf der Ausrichtung zu ändern

Sie können das Bild für beide Hoch- und Querformat ändern, indem verschiedene Bilder für verschiedene Orientierungen Versorgung durch die Rahmengröße der UINavigation bar Instanz überprüft:

- (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);
}

Und diese komplette Demo Xcode Projekt auf das Auftreten von UINavigationBar Anpassung könnte hilfreich sein. Es enthält auch @ 2x Versionen von Hintergrundbildern Retina-Displays auf dem iPhone 4 Geräte zu unterstützen.

Versuchen Sie, die einfachere Methode von [UIImage imageNamed:@"navbar_landscape.png"] da ein UI-Element ist genau das, was imagenamed:. ist für den, wie ljonesATL zeigt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top