Redimensionner dynamiquement étiquette dans iOS 7
Dans iOS 6, je suis en utilisant :
CGSize labelSize = [self.text sizeWithFont:self.font constrainedToSize:size lineBreakMode:self.lineBreakMode];
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y , labelSize.width, self.frame.size.height);
De redimensionner dynamiquement un UILabel. Cela ne fonctionne pas sous iOS 7, donc j'ai essayé:
NSString *text = self.text;
CGFloat width = size.width;
UIFont *font = self.font;
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text
attributes:@{ NSFontAttributeName: font }];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
options:NSStringDrawingUsesDeviceMetrics
context:nil];
CGSize size = rect.size;
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y , size.width, self.frame.size.height);
C'est à l'intérieur d'une catégorie sur UILabel, mais ce n'est pas de travail aussi...
Les idées de ce que je devrais utiliser?
Ce n'est pas de travail? Est le calcul de la taille de la trame de mal, ou est la taille de l'étiquette changement ne se produit pas?
OriginalL'auteur user426132 | 2013-09-26
Vous devez vous connecter pour publier un commentaire.
Essayer quelque chose comme cela (travail sans mise en page automatique) :
OriginalL'auteur Jordan Montel
Sans plus de détails sur le pourquoi ça ne marche pas, j'imagine que vous devez utiliser l'option
NSStringDrawingUsesLineFragmentOrigin
afin qu'il devienne une baisse-dans le remplacement pour l'anciensizeWithFont:
, comme ceci:Veuillez noter que la documentation mentionne:
Donc, pour tirer le calcul de la hauteur ou la largeur d'être utilisées pour le dimensionnement des points de vue, je voudrais utiliser:
aidez-moi à comprendre ce qui ne fonctionne pas. Ce n'est pas se comporter de la façon
sizeWithFont:
?OriginalL'auteur Mr. T
OriginalL'auteur code_free
Cela devrait fonctionner dans iOS6 et iOS7, mais va briser votre étiquette de contraintes (vous devez définir tous de retour par programmation si nécessaire):
Ajouter cette méthode pour votre viewController et de l'utiliser comme ceci:
Essayez, je pense qu'il n'est pas si difficile de modifier le code pour redimensionner la largeur.
essayé ... ne fonctionne pas
Assurez-vous que vous avez ajouté à l'étiquette de vue (à l'aide de l'IB ou par programmation) avant d'appeler cette méthode. Si vous utilisez l'auto-mise en page et les contraintes, essayez de vous déconnecter de l'étiquette largeur/hauteur avant et après l'application de cette fonction si elle a changé. Si le cadre a changé, vous devez ajuster les contraintes. Si non, alors il y a une erreur quelque part d'autre. Essayez quelque chose comme
NSLog (@"width:%f, height:%f", myLabel.frame.size.width, mylabel.frame.size.height);
de journal largeur/hauteur.OriginalL'auteur Deniss Fedotovs