web-dev-qa-db-fra.com

Est-il possible de changer la hauteur d'une barre UIToolbar?

J'ai une UIToolbar dans Interface Builder et j'ai remarqué qu'elle est bloquée à une hauteur de 44 pixels. Bien sûr, je voudrais agrandir ceci.

Apple autorise-t-il le redimensionnement de ce contrôle? Si oui, comment puis-je m'y prendre?

59
mac_55

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

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

Cela rendra votre barre d’outils haute de 35 pixels. Bien sûr, cela nécessite un IBOutlet ou la création de la barre UIToolbar par programme, mais cela est très facile à faire.

64
David Kanarek

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

Sélectionnez l'élément de la barre d'outils, puis choisissez Editeur> Épingler> Hauteur pour créer une contrainte . Accédez à la scène de votre contrôleur de vue, sélectionnez la contrainte de hauteur créée (44), puis indiquez la valeur souhaitée.

45
ericmaciel

J'ai constaté que si je définissais le cadre sur l'iPad, masquer/afficher la barre d'outils reviendrait à une hauteur de 44 pixels. J'ai fini par devoir remplacer UIToolbar et changer de 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 corrigerait ajuster la hauteur même avec le cache/show.

38

Dans iOS 6, avec autolayout, l'approche la plus simple est une sous-classe UIToolbar dans laquelle vous remplacez 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 comme d’habitude.

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

Pour Xcode 7.1 iOS 9, dans la présentation automatique, la taille est verrouillée à 44px. L'option de menu Xcode Editor> Pin> Height n'existe pas, effectuez l'action suivante:

Dans InterfaceBuilder, cliquez sur l'élément de la barre d'outils pour le sélectionner . Contrôle + Faites glisser vers le bas n'importe où dans la barre d'outils et relâchez-le, un menu contextuel s'affiche et indique l'option "Hauteur" en haut, sélectionnez-la.

Vous avez maintenant une contrainte de hauteur à utiliser et à ajuster si nécessaire.

14
cavalleydude

Vous pouvez aussi simplement éditer le fichier xib: 

ouvrez-le en tant que code source et recherchez l’entrée qui définit le cadre de la barre UIToolbar, à l’instar de 

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

et remplacez simplement la valeur 44 par la taille dont vous avez besoin.

De cette façon, la barre d’outils sera plus grande et dans InterfaceBuilder, la nouvelle taille sera grisée et vous ne pourrez pas la modifier, mais vous n’avez besoin ni de sortie ni de code.

6
Radu Diță

Tant que vous avez une contrainte de hauteur dans la barre d’outils, vous pouvez utiliser ce petit extrait qui m’a aidé à ajuster les hauteurs des classes héritées de UIView

-(void)setHeightConstraintTo:(CGFloat)height forView:(UIView *)view{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d",          NSLayoutAttributeHeight];
    NSArray *filteredArray = [view.constraints filteredArrayUsingPredicate:predicate];
    if(filteredArray.count > 0){
        NSLayoutConstraint *constraint = filteredArray.firstObject;
        constraint.constant = height;
    }
 }
2
Alberto Lopez

Je ne sais pas comment cela se passera avec Apple - et bien sûr, cela dépend de la manière dont vous souhaitez utiliser la barre d'outils - mais vous pouvez ajouter un UIView par défaut et modifier sa classe dans UIToolbar, dans l'inspecteur de propriétés. Cela vous donne gratuitement la transparence et la personnalisation (dans ce cas-ci hauteur), au détriment de la disposition des éléments de boutons.

1
Robin Macharg

Dans le générateur d'interface, il est également possible d'utiliser des "attributs d'exécution définis par l'utilisateur".

Ajoutez simplement une entrée avec keypath défini sur "frame" de type "Rect" et définissez la valeur souhaitée.

 enter image description here

0
FredericK

Solution rapide:

myToolbar.frame = CGRect(x: myToolbar.frame.Origin.x, y: myToolbar.frame.Origin.y, width: myToolbar.frame.size.width, height: 20)

La CGRectMake est obsolète. Ceci peut être remplacé par la CGRect. Cela définira la hauteur de la barre d’outils sur 20. Cela est également valable pour le contrôle segmenté.

0
Ragul Parani