Frage

Ich füge eine benutzerdefinierte Hintergrundbild meiner UINavigationBar durch den drawRect über eine Kategorie überschreiben.

- ( void )drawRect:( CGRect )rect{
    [[UIImage imageNamed:@"navbar.png"] drawInRect:CGRectMake( 0, self.frame.size.height-44, self.frame.size.width, 44 )];
}

Diese Lösung scheint gut zu funktionieren, bis Sie versuchen, den Einsatz von navigationitem.prompt Eigentum zu machen. Statt eine glatte Animation präsentiert die Aufforderung zu tun, es tut es abrupt.

Gibt es irgendwelche Vorschläge, wie dies zu beheben? Oder eine alternative Möglichkeit, ein Hintergrundbild zu setzen.

PS. Ich versuche nur, zu vermeiden, dass ein Hintergrundbild als ein Subview Zugabe wegen der Art, die Dinge neu ordnen, wenn Ansichten Push / Pop. Und ich würde in jeder Ansicht der viewDidAppear zu sendSubviewToBack hasse.

TIA!

EDIT: Ich habe auch versucht Methode Swizzling, was in Ordnung funktionieren würde, wenn ich nur mein Bild strecken lassen könnte, aber da das Bild nicht dehnbar ist, muss ich herausfinden, wie in der Animation zu erschließen, die eine Verschiebung tun geschieht statt einer Strecke.

EDIT: siehe meine Hacky Antwort unten

War es hilfreich?

Lösung

So sehr „Hacky“, aber das ist in der Nähe ich es tun bekommen kann, was ich will ...

Im Grunde genommen, wenn Methode Swizzling, einfach läßt das Bild streckt nicht funktioniert gut für mich, weil ich auch abgerundete Ecken hatte. Anstatt also machte ich die Ecken einen separaten transparenten img und fügen Sie es als ein Subview, so dass sie nicht von der Strecke Animation Mitleidenschaft gezogen werden würde.

Also meine Kategorie sieht nun wie folgt ..

#import "UINavigationBar+custom.h"

#define cornersTag 1

@implementation UINavigationBar (UINavigationBarCategory)

-(void)setCornersIfNeeded{
 UIImageView *corners = (UIImageView*)[self viewWithTag:cornersTag];
 if(!corners){
  UIImage *img = [[UIImage imageNamed:@"navbar_corners.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0];
  corners = [[[UIImageView alloc] initWithImage:img] autorelease];
  corners.frame = CGRectMake(0, 0, self.frame.size.width, img.size.height);
  corners.tag = cornersTag;
  [self addSubview:corners];
 }
}

- (void)customDrawRect:( CGRect )rect{
 [self customDrawRect:rect];
 [[UIImage imageNamed:@"navbar.png"] drawInRect:rect]; 
 [self setCornersIfNeeded];
}

@end

Weitere Informationen über die Methode Swizzling ... http://www.cocoadev.com/index .pl? MethodSwizzling und Methode Swizzle auf iPhone Gerät

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