2009-04-15 7 views
0

Le design qui m'a été donné pour une application iPhone Je travaille sur les appels pour une ligne rouge 1px au bas de la barre de navigation. Je sais comment tracer une ligne avec Quartz et -drawRect, mais comment avoir accès à la vue de UINavigationBar? Ou travaillerait-il à dessiner la ligne dans la vue principale de l'application, en plus de tout le reste?Comment dessiner une ligne en bas d'un UINavigationBar?

La réponse de Duncan Wilcox ci-dessous fonctionne pour que la ligne soit dessinée, mais il devient impossible d'appuyer sur les boutons de la barre. Si je fais [self.navigationItem.titleView.superview sendSubviewToBack: titleView], les boutons créés dans les fichiers nib fonctionnent, mais pas ceux qui sont ajoutés dynamiquement.

Répondre

0

ce que j'ai réglé sur:

// UINavigationBar subclass 
- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"background_navbar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 
+0

Notez que imageNamed est considéré comme gênant http://www.alexcurylo.com/blog/2009/01/13/imagenamed-is-evil/ – duncanwilcox

1

Je suppose que la réponse dépend de l'endroit où vous voulez que la ligne rouge, dans la barre de navigation ou juste en dessous. Ce serait seulement une différence de 1 pixel, mais les concepteurs sont exigeants ces jours-ci :)

Si vous le souhaitez sous la barre de navigation, vous devez absolument le mettre dans toutes les vues de l'application où la ligne est nécessaire. Il y a une manière étonnamment simple de modifier l'apparence de la barre de navigation, je l'ai utilisée pour écorcher l'ensemble de la barre de navigation, mais cela ne fonctionnera probablement que pour certaines parties de la barre de navigation si l'image est partiellement transparente.

Fondamentalement, nous voulons habiller le UINavigationItem d'un UIViewController qui est dans votre hiérarchie de navigation.

  • créer une 320x44 image contenant votre barre de navigation personnalisée regarder
  • ajouter un UIImageView au XIB où le UINavigationItem est
  • lien la propriété titleView du UINavigationItem au UIImageView

Cette presque œuvres , sauf que la vue du titre sera redimensionnée de manière bizarre. Pour résoudre ce problème, j'ai une sous-classe UIImageView qui maintient l'image correctement définie:

@implementation TitleViewHack 
- (void)setFrame:(CGRect)frame 
{ 
    frame.size.width = 320; 
    if(frame.origin.x > 0 && frame.origin.x < 20) 
     frame.origin.x = 0; 
    [super setFrame:frame]; 
} 
@end 

Ainsi, au lieu d'utiliser un UIImageView ci-dessus vous utiliserez cette classe TitleViewHack.

+0

haha, c'est une bidouille! Avez-vous rencontré des problèmes avec le titleView interférant avec les boutons de la barre de navigation, ou est-il automatiquement placé derrière eux? – lawrence

+0

En fait, je l'utilise uniquement sur l'écran d'accueil d'une application, et il n'y a pas de boutons là-bas. Je suppose qu'il pourrait y avoir des problèmes avec les boutons de navigation standard. Dans ce cas, vous pouvez essayer la technique de définition de la couleur d'arrière-plan et d'utiliser la propriété colorWithPatternImage. – duncanwilcox

+0

Il s'avère que cela interfère avec les boutons. J'ai fini par écraser [UINavigationBar drawRect] et placer l'image là avec [UIImage drawInRect:]. – lawrence

Questions connexes