web-dev-qa-db-fra.com

Créer par programme UILabel

Je sais que cela devrait être très simple, mais j'ai vraiment eu du mal à créer un programme UILabel par programme et à le faire évoluer comme je le souhaiterais.

Tout ce que je veux, c'est pouvoir créer une étiquette, définir les attributs maximaux en hauteur, largeur et taille de police, puis réduire la taille du texte ET/OU simplement la tronquer pour l'adapter à de longues chaînes de texte.

Supposons que je souhaite que mon étiquette ait un texte d'une largeur maximale de 380, d'une hauteur maximale de 20 et d'une taille de police maximale de 12.

Voici donc ce que j'ai essayé de faire pour créer un tel label:

UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(91, 15, 0, 0)];
fromLabel.text = [self fromSender];
fromLabel.font = [UIFont fontWithName:ProximaNovaSemibold size:12]; //custom font
fromLabel.numberOfLines = 1;
fromLabel.baselineAdjustment = YES;
fromLabel.adjustsFontSizeToFitWidth = YES;
fromLabel.adjustsLetterSpacingToFitWidth = YES;
fromLabel.size = [fromLabel.text sizeWithFont:fromLabel.font constrainedToSize:CGSizeMake(380, 20) lineBreakMode:NSLineBreakByTruncatingTail];
fromLabel.minimumScaleFactor = MIN_SCALE_FACTOR;
fromLabel.clipsToBounds = YES;
fromLabel.backgroundColor = [UIColor clearColor];
fromLabel.textColor = [UIColor blackColor];
fromLabel.textAlignment = NSTextAlignmentLeft;
[collapsedViewContainer addSubview:fromLabel];

Ok, donc l'étiquette apparaît, mais le texte est plus grand que 12 et la hauteur est toujours 21!? Même si je modifie les valeurs de hauteur et de taille de texte en valeurs extrêmes, ce code crée une étiquette de taille fixe qui ne peut pas être ajustée. La seule chose que je peux sembler réduire est la largeur.

Je dois être trop à la recherche de quelque chose de fondamental, mais je ne peux vraiment pas trouver comment obtenir le résultat souhaité, je ne comprends pas non plus pourquoi j'obtiens le comportement que j'obtiens.

32
jac300

Est-ce que ça marche?

UIFont * customFont = [UIFont fontWithName:ProximaNovaSemibold size:12]; //custom font
NSString * text = [self fromSender];

CGSize labelSize = [text sizeWithFont:customFont constrainedToSize:CGSizeMake(380, 20) lineBreakMode:NSLineBreakByTruncatingTail];

UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(91, 15, labelSize.width, labelSize.height)];
fromLabel.text = text;
fromLabel.font = customFont;
fromLabel.numberOfLines = 1;
fromLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines; // or UIBaselineAdjustmentAlignCenters, or UIBaselineAdjustmentNone
fromLabel.adjustsFontSizeToFitWidth = YES;
fromLabel.adjustsLetterSpacingToFitWidth = YES;
fromLabel.minimumScaleFactor = 10.0f/12.0f;
fromLabel.clipsToBounds = YES;
fromLabel.backgroundColor = [UIColor clearColor];
fromLabel.textColor = [UIColor blackColor];
fromLabel.textAlignment = NSTextAlignmentLeft;
[collapsedViewContainer addSubview:fromLabel];

edit: Je pense que vous pouvez rencontrer un problème en utilisant à la fois adjustsFontSizeToFitWidth et minimumScaleFactor. Le premier indique que vous devez également définir un minimumFontWidth (sinon, cela peut devenir quelque chose d'assez illisible selon mon test), mais ceci est obsolète et remplacé par le suivant.

edit 2: Nevermind, documentation obsolète. adjustsFontSizeToFitWidth a besoin de minimumScaleFactor, assurez-vous simplement de ne pas le transmettre à 0 en tant que minimumScaleFactor (division entière, 10/12 retour 0). Petit changement sur la valeur baselineAdjustment également.

54
Nerkatel
UILabel *lbl1 = [[UILabel alloc] init];
/*important--------- */lbl1.textColor = [UIColor blackColor];
[lbl1 setFrame:position];
lbl1.backgroundColor=[UIColor clearColor];
lbl1.textColor=[UIColor whiteColor];
lbl1.userInteractionEnabled=NO;
lbl1.text= @"TEST";
[self.view addSubview:lbl1];
12
TtheTank

voici comment créer UILabel par programme ..

1) Ecrivez ceci dans le fichier .h de votre projet.

UILabel *label;

2) Ecrivez ceci dans le fichier .m de votre projet.

label=[[UILabel alloc]initWithFrame:CGRectMake(10, 70, 50, 50)];//Set frame of label in your viewcontroller.
[label setBackgroundColor:[UIColor lightGrayColor]];//Set background color of label.
[label setText:@"Label"];//Set text in label.
[label setTextColor:[UIColor blackColor]];//Set text color in label.
[label setTextAlignment:NSTextAlignmentCenter];//Set text alignment in label.
[label setBaselineAdjustment:UIBaselineAdjustmentAlignBaselines];//Set line adjustment.
[label setLineBreakMode:NSLineBreakByCharWrapping];//Set linebreaking mode..
[label setNumberOfLines:1];//Set number of lines in label.
[label.layer setCornerRadius:25.0];//Set corner radius of label to change the shape.
[label.layer setBorderWidth:2.0f];//Set border width of label.
[label setClipsToBounds:YES];//Set its to YES for Corner radius to work.
[label.layer setBorderColor:[UIColor blackColor].CGColor];//Set Border color.
[self.view addSubview:label];//Add it to the view of your choice. 
7
krushnsinh

Swift 3:

let label = UILabel(frame: CGRect(x:0,y: 0,width: 250,height: 50))
label.textAlignment = .center
label.textColor = .white
label.font = UIFont(name: "Avenir-Light", size: 15.0)
label.text = "This is a Label"
self.view.addSubview(label)
3
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 30, 300, 50)];
label.backgroundColor = [UIColor clearColor];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.numberOfLines = 0;
label.lineBreakMode = UILineBreakModeWordWrap;
label.text = @"Your Text";
[self.view addSubview:label];
2
Ved Rauniyar
In Swift -

var label:UILabel = UILabel(frame: CGRectMake(0, 0, 70, 20))
label.center = CGPointMake(50, 70)
label.textAlignment = NSTextAlignment.Center
label.text = "message"
label.textColor = UIColor.blackColor()
self.view.addSubview(label)
1
Ved Rauniyar

Pour Swift

var label = UILabel(frame: CGRect(x: 0, y: 0, width: 250, height: 50))
label.textAlignment = .left
label.text = "This is a Label"
self.view.addSubview(label)
0
Fawad Masud