60 votes

Existe-t-il un moyen de modifier la hauteur d'une UIToolbar ?

J'ai un UIToolbar dans Interface Builder et j'ai remarqué qu'il est verrouillé à 44px de hauteur. J'aimerais bien sûr l'agrandir.

Apple autorise-t-il le redimensionnement de ce contrôle ? Si oui, comment dois-je procéder ?

65voto

David Kanarek Points 8816

Bien sûr, il suffit de définir son cadre différemment :

[myToolbar setFrame:CGRectMake(0, 50, 320, 35)];

Votre barre d'outils aura ainsi une hauteur de 35 pixels. Bien sûr, cela nécessite une IBOutlet ou la création programmatique de la UIToolbar, mais c'est très facile à faire.

11 votes

Le redimensionnement UIToolbar être rejeté de l'AppStore ?

5 votes

Non, j'ai essayé et j'ai échoué. Mais parfois, cela dépend de l'humeur quotidienne de votre homme à la pomme.

2 votes

Je n'aime pas cette solution car elle entraîne le redimensionnement de la barre d'outils lors des transitions d'apparence. La solution sizeThatFits ci-dessous fonctionne mieux

46voto

ericmaciel Points 231

Si cela ne fonctionne pas dans le SDK 6, il est possible de résoudre le problème comme ci-dessous :

Sélectionnez l'élément barre d'outils et choisissez Éditeur > Épingler > Hauteur pour créer une contrainte. Allez dans votre scène de contrôleur de vue et sélectionnez la contrainte Hauteur(44) créée, puis mettez la valeur que vous voulez.

1 votes

Je suis si heureuse d'avoir trouvé ce commentaire, j'aimerais pouvoir vous voter mille fois plus. J'ai passé beaucoup trop de temps à essayer de comprendre ce code.

0 votes

C'est du pur génie. Merci. Merci à vous.

0 votes

Xcode 8 a cette capacité. Je ne suis pas sûr de ce qui s'est passé entre les différentes versions.

38voto

christophercotton Points 3969

J'ai constaté que si je définissais le cadre sur l'iPad, lorsque je cachais/affichais la barre d'outils, elle revenait à une hauteur de 44 pixels. J'ai fini par devoir remplacer UIToolbar et modifier la méthode :

// return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize result = [super sizeThatFits:size];
    result.height = 55;
    return result;
};     

Cela permettrait de régler correctement la hauteur, même avec le système de dissimulation.

1 votes

J'ai constaté que lorsque j'ai une valeur impaire pour la hauteur (en résolution non-retina), l'origine est décalée de 0,5 pixel. J'ai dû corriger les cadres des barres de navigation et d'outils dans la méthode viewDidLoad des VCs.

0 votes

@Ege, pouvez-vous nous en dire plus ?

1 votes

Bien sûr @MarqueIV, j'ai modifié sizeThatFits pour la hauteur personnalisée d'une barre de navigation (pas d'une barre d'outils) et j'ai constaté que lorsque la hauteur n'est pas un multiple de 4 points, lorsque je cache la barre de navigation et que je la réaffiche, la valeur y de son origine est de 0,5 au lieu de 0. Je ne constate pas ce comportement lorsque la hauteur personnalisée est un multiple de 4.

16voto

matt Points 60113

Dans iOS 6, avec autolayout, l'approche la plus simple est une sous-classe UIToolbar dans laquelle vous surchargez instrinsicContentSize . Voici le code d'une de mes applications, où la barre d'outils est haute. Ses côtés et son fond sont épinglés aux côtés et au fond de la vue supérieure comme d'habitude.

-(CGSize)intrinsicContentSize {
    return CGSizeMake(UIViewNoIntrinsicMetric, 85);
}

0 votes

J'aime votre solution. J'utilise la barre d'outils intégrée à UINavigationController, je ne peux donc pas la sous-classer. À la place, j'ai utilisé intrinsicContentSize sur UIToolbar et j'ai retrouvé la hauteur désirée.

0 votes

@KyleRedfearn "J'utilise la barre d'outils intégrée à UINavigationController, je ne peux donc pas la sous-classer" Faux. initWithNavigationBarClass:toolbarClass: vous permet d'utiliser une sous-classe de UIToolbar avec votre contrôleur de navigation.

0 votes

Ah oui. J'avais oublié l'initialisateur. Merci.

7voto

hades2510 Points 795

Vous pouvez aussi simplement modifier le fichier xib :

ouvrez-le en tant que code source et trouvez l'entrée qui définit le cadre de la barre d'outils UIToolbar, quelque chose du genre

<string key="NSFrame">{{0,420}, {320,44}}</string>

et changez simplement la valeur de 44 pour la taille dont vous avez besoin.

De cette façon, la barre d'outils sera plus haute, et dans InterfaceBuilder, vous verrez la nouvelle taille en grisé et vous ne pourrez pas la modifier, mais vous n'avez pas besoin de sorties ou de code.

0 votes

Cela ne semble plus fonctionner. Je viens de le tester sur XCode 5.1.1 pour un storyboard utilisant le style iOS7. Les valeurs sont réinitialisées à leurs valeurs par défaut.

1 votes

Fonctionne en fait pour ios10 swift et la ligne que vous devez chercher est <constraint firstAttribute="height" constant="80" id="fZW-ej-FYO"/>

0 votes

Cela a fonctionné parfaitement pour moi en utilisant un Xib personnalisé, note pour IOS13 la hauteur peut maintenant être trouvée dans cette ligne : <rect key="frame" x="0.0" y="0.0" width="187" height="57"/>

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