31 votes

Placement d'une vue personnalisée basée sur UIBarButtonItem dans la barre de navigation sans remplissage horizontal par défaut

Comment puis-je supprimer le remplissage horizontal à gauche et à droite de la coutume de gauche et de droite UINavigationBar éléments? Il semble être d'environ 10 points de remplissage que iOS définit par défaut.

Je suis personnalisation à gauche et à droite de la barre de navigation les boutons (j'ai renoncé à essayer de régler mon propre backButtonItem, donc je suis juste en utilisant le leftBarButtonItem).

Dans les deux cas (à gauche ou à droite), en appuyant sur ces boutons personnalisés indique qu'Apple semble de préserver un peu de rembourrage à gauche de la leftBarButtonItem, et à la droite de la rightBarButtonItem; indépendamment de la façon dont l'échelle de je rendre l'arrière-plan personnalisé et les propriétés de l'image de la UIButton je place à l'intérieur de la gauche/droite bouton de la barre d'élément sous forme de vue personnalisée.

Depuis UIBarButtonItems n'ai pas de "cadre" je peux y accéder, je ne peux pas leur position au sein de leur superview comme je peux normal UIViews.

Toutes les suggestions sur comment faire pour supprimer ce défaut de rembourrage? Voir la capture d'écran jointe à voir le peu que je suis en train de réduire à une largeur nulle. Dans la capture d'écran, l'icône apparaît décalé vers la droite parce que je lui ai donné un encart; mais en surbrillance image d'arrière-plan, probablement à l'aide que l'encart est clipsé sur son côté droit).

Voir image: https://skitch.com/starbaseweb/rj2e5/ios-simulator

Pour référence, voici comment je crée mes personnalisé UIBarButtonItem (dans ce cas, c'est le bouton de droite):

- (UIBarButtonItem *)customAddButtonItemWithTarget:(id)target action:(SEL)action {
  UIButton *customButtonView = [UIButton buttonWithType:UIButtonTypeCustom];

    customButtonView.frame = CGRectMake(0.0f, 0.0f, 45.0f, 44.0f);

    [customButtonView setBackgroundImage:
        [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Normal.png"] 
        forState:UIControlStateNormal];
    [customButtonView setBackgroundImage:
        [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Highlighted.png"] 
        forState:UIControlStateHighlighted];

    [customButtonView setImage:
        [UIImage imageNamed:@"bgNavBarButton-Add-Normal.png"] 
        forState:UIControlStateNormal];
    [customButtonView setImage:
        [UIImage imageNamed:@"bgNavBarButton-Add-Highlighted.png"] 
        forState:UIControlStateHighlighted];

    [customButtonView addTarget:target action:action 
        forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *customButtonItem = [[[UIBarButtonItem alloc] 
        initWithCustomView:customButtonView] autorelease];
    [customButtonView setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f)];

    //customButtonItem.imageInsets = UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f);

    return customButtonItem;    
}

83voto

idStar Points 3735

55As commenté ci-dessus, la solution, je suis allé avec est basée sur la réponse à un autre, mais très liés à la question: Comment régler UIToolBar à gauche et à droite de rembourrage. Il est également facilitée par (et dépend de l') iOS5, qui vous permet de définir plusieurs boutons sur le côté gauche ou droit, au lieu d'un seul.

Voici un exemple de retirer le rembourrage à la gauche d'une coutume bouton de gauche de l'élément:

UIBarButtonItem *backButtonItem // Assume this exists, filled with our custom view

// Create a negative spacer to go to the left of our custom back button, 
// and pull it right to the edge:
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace 
    target:nil action:nil];
negativeSpacer.width = -5; 
// Note: We use 5 above b/c that's how many pixels of padding iOS seems to add

// Add the two buttons together on the left:
self.navigationItem.leftBarButtonItems = [NSArray 
    arrayWithObjects:negativeSpacer, backButtonItem, nil];

Et avec cela, le padding à gauche de la gauche bouton de la barre d'élément dans la barre de navigation, est allé!

REMARQUE: Ce qui a fonctionné pour moi dans iOS5 et iOS6. Étant donné que iOS7 est considérablement différent (de la part du public démos), ceux d'entre vous avec les premières semences de iOS7 doit tester si quelque chose de manière involontaire, à l'instar de ce hack, va continuer à travailler pour vous au-delà de iOS6.

3voto

Evadne Wu Points 2781

J'ai essayé cela et cela fonctionne:

1) Créez une sous-classe UIToolbar personnalisée, qui ne fait rien dans -drawRect:, et n'est pas opaque, et a backgroundColor = [UIColor clearColor].

2) Créez un UIBarButtonItem personnalisé avec la barre d'outils comme vue personnalisée.

3) Ajoutez vos boutons à la barre d'outils personnalisée.

4) Dans votre barre d'outils personnalisée, remplacez -layoutSubviews et faites votre propre espacement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X