Подтвердить что ты не робот

Программное создание UILabel

Я знаю, что это должно быть очень просто, но я действительно борется с созданием UILabel программно и заставить его вести себя так, как хотелось бы.

Все, что я хочу, это создать ярлык, установить максимальные атрибуты по высоте, ширине и размеру шрифта, а затем уменьшить текст. И/ИЛИ просто обрезать текст для размещения длинных строк текста.

Скажем, что я хочу, чтобы мой ярлык имел текст с максимальной шириной 380, максимальную высоту 20 и максимальный размер шрифта 12.

Итак, вот что я пытался сделать для создания такой метки:

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];

Итак, ярлык появляется, но текст больше 12, а высота всегда равна 21!? Даже если я изменяю значения высоты и размера текста до экстремальных размеров, этот код создает метку некоторого фиксированного размера, который нельзя отрегулировать. Единственное, что я могу сделать меньше, это ширина.

Я должен пересмотреть что-то основное, но я действительно не могу понять, как получить желаемый результат, и не понимаю, почему я получаю поведение, которое получаю.

4b9b3361

Ответ 1

Выполняется ли следующее?

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: Я считаю, что вы можете столкнуться с проблемой, используя как adjustsFontSizeToFitWidth, так и minimumScaleFactor. Первая заявляет, что вам также нужно установить minimumFontWidth (иначе она может сместиться к чему-то совершенно нечитаемому в соответствии с моим тестом), но это устарело и заменено более поздним.

edit 2: Nevermind, устаревшая документация. adjustsFontSizeToFitWidth требуется minimumScaleFactor, просто не забудьте передать его 0 как минимумScaleFactor (целочисленное деление, 10/12 return 0). Небольшое изменение в значении baselineAdjustment.

Ответ 2

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];

Ответ 3

вот как программировать UILabel Programmatically..

1) Напишите это в файле .h вашего проекта.

UILabel *label;

2) Запишите это в .m файл вашего проекта.

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. 

Ответ 4

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];

Ответ 5

Для быстрого

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)

Ответ 6

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)

Ответ 7

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)

Ответ 8

UILabel *mycoollabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 70, 50, 50)];
[email protected]"I am cool";

// for multiple lines,if text lenght is long use next line
mycoollabel.numberOfLines=0;
[self.View addSubView:mycoollabel];

Ответ 9

UILabel *label = [UIlabel alloc] init];

label.Frame = CGRectMake(0,20,100,50);

label.Backgroundcolor = [UIColor whiteColor];

label.text = @"Hello";

[self.view addSubView:label];