Faire de la police de grandir ensemble avec UILabel (redimensionnée par la Mise en page Automatique) - comment faire dans Interface Builder?
Dans une simple application iPhone - je afficher une lettre de tuiles (personnalisé UIView
avec une image et 2 étiquettes) par le code suivant dans viewDidLoad:
DraggedTile *tile = [[[NSBundle mainBundle] loadNibNamed:@"DraggedTile"
owner:self
options:nil] firstObject];
tile.frame = CGRectMake(10 + arc4random_uniform(100),
10 + arc4random_uniform(100),
kWidth,
kHeight);
[self.view addSubview:tile];
Cela fonctionne bien, mais je voudrais faire la lettre de la tuile de croître - quand j'offre une plus grande largeur et la hauteur des paramètres à la CGRectMake
.
Donc dans Xcode 5.1 Interface Builder, j'ouvre le DraggedTile.xib
et activez l'option "Mise en page Automatique".
Puis pour le image
et letter
je ajouter des contraintes à la gauche, haut, droite, bas bords de la mère.
Pour la letter
étiquette j'ai aussi mis des "Lignes" à 0 et du "Contenu" de la Résistance à la Compression Priorité" à 1000 (ici plein écran 1 et plein écran 2):
Puis j'ai modifier le code pour utiliser une plus grande largeur et la hauteur:
tile.frame = CGRectMake(10 + arc4random_uniform(100),
10 + arc4random_uniform(100),
2 * kWidth,
2 * kHeight);
Voici le résultat:
À la fois le fond image
et la letter
étiquette semble avoir augmenté comme prévu.
Cependant la taille de la police de l'étiquette n'a pas grandi.
J'ai cherché partout et je pense que j'ai besoin de quelque chose comme tile.letter.adjustsFontSizeToFitWidth = YES
. Mais en même temps, je ne peux pas l'utiliser avec "Auto" Mise en page pour être sur...
Donc ma question est si il n'y a aucune option dans le "Interface Builder" disponible pour faire de la taille de la police augmenter?
Mise à JOUR:
J'ai essayé ismailgulek la suggestion de définir la taille de la police à 200 dans Interface Builder et dans le code tile.letter.adjustsFontSizeToFitWidth = YES
et il semble prometteur (ici plein écran):
mais j'ai maintenant le problème que j'ai mis 40px comme le letter.bottom
contrainte dans Interface Builder. Mais que faire si j'ai besoin d'un plus grand carreau cadre? Est-il possible d'utiliser de pourcentage au lieu de absolue de la valeur du pixel dans le cadre de cette contrainte?
Et une autre question est si il est possible de définir la adjustsFontSizeToFitWidth
quelque part dans Interface Builder ou dois-je utiliser le code source pour ça? J'ai essayé d'ajouter une touche à la "Défini par l'Utilisateur Runtime Attributs" - mais alors, l'application se bloque lors de l'exécution:
- Vous êtes censé définir les contraintes de l'autre étiquette.
- mais votre autre label semble égaré,voulez-vous de cette façon?
- Je vais corriger la position de l'autre étiquette plus tard. Maintenant, je me demande à propos de la taille de la police.
- Quelles sont les dimensions que vous observez? Si vous pixelliser le calque de l'étiquette grâce à une grande échelle, vous pouvez obtenir cet effet très facilement avec peu de travail.
- En fait j'ai résolu mon problème en attendant, par le redimensionnement de toutes les ressources graphiques. Mais merci pour les conseils.
Vous devez vous connecter pour publier un commentaire.
adjustsFontSizeToFitWidth
propriété deUILabel
ne grandiront pas la taille de la police, c'est seulement de la réduction en fonction de la documentation: Normalement, le texte de l'étiquette est dessiné avec lefont
vous spécifiez dans la propriété font. Si cette propriété est définie àYES
, cependant, et le texte dans la propriété dépasse l'étiquette du rectangle de délimitation, le récepteur commence à la réduction de la taille de la police jusqu'à ce que la chaîne s'adapte ou la taille de police minimale est atteinte.Mais si vous définissez la taille de police assez grande (disons 200) et de définir
adjustsFontSizeToFitWidth
àYES
, je crois que vous obtenir il est intéressant de précieux résultats.Et ne pas oublier de mettre
Baseline
commeAlign Centers
, sinon votre texte ne peut pas être vu correctement.Merci de nous informer de vos résultats.
Align centers
qui, comme vous l'avez décrit, a aidé avec mon problème depuis que je suis le seul à le faire avec le titre. Merci!Pour ceux qui viennent ici par le titre et le besoin d'un solution simple (après heures des enquêtes):
Problème exemple: Si vous utilisez la mise en page automatique et définir la UILabel hauteur proportionnelle à la hauteur de l'écran, vous obtiendrez une image qui est faible pour iPhone (paysage) et de haut pour l'iPad. Comment ajuster la hauteur de la police automatiquement?
Solution: dans Interface Builder,
Ce sera la cause de la police à augmentée automatiquement à la hauteur actuelle.
Vous pouvez accomplir ce que vous voulez par définition de la réduction automatique de votre storyboard. Il sera la cause de l'étiquette, afin de réduire à un minimum l'échelle/taille explicite lorsque la taille de l'écran est plus petit. Le faire fonctionner sur la plus grande taille de l'écran et ensuite s'assurer qu'elle se rétrécit à la taille que vous voulez dans la table de montage séquentiel aperçu.
Vous pouvez remplacer la classe dans Interface Builder avec votre propre classe dérivée et de faire le redimensionnement de là.
Exemple:
À partir de maintenant, il vous suffit de remplacer le UILabel classe avec MYLabel dans le identité de l'inspecteur de l'IB et de toutes vos polices automatiquement redimensionner proportionnellement à la hauteur de vos appareils.
Si vous voulez juste croître avec la taille de l'étiquette, remplacer
avec
ou de toute autre échelle personnalisée formule. UIFont vous offre supplémentaire de mesure de propriétés que vous pouvez faire beaucoup de choses avec cette approche.
La police ne se développera pas automatiquement.
Vous devez augmenter/diminuer par vous-même, au bureau de l'IB ou par programmation.