it-swarm.asia

برمجيا إنشاء 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 عامًا؟ حتى إذا قمت بتغيير قيم الطول وحجم النص إلى أحجام متطرفة ، فإن هذا الرمز يخلق تسمية لبعض الحجم الثابت لا يمكن ضبطه. الشيء الوحيد الذي يمكن أن يبدو أنني أصغر حجمًا هو العرض.

يجب أن أكون أكثر من مجرد البحث عن شيء أساسي ، لكنني لا أستطيع حقًا أن أعرف كيف أحصل على النتيجة المرجوة ، ولا أفهم لماذا أحصل على السلوك الذي أحصل عليه.

32
jac300

هل العمل التالي؟

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

تحرير: أعتقد أنك قد تواجه مشكلة في استخدام كل من adjustsFontSizeToFitWidth و minimumScaleFactor. تنص السابقة على أنك تحتاج أيضًا إلى تعيين minimumFontWidth (وإلا فقد يتقلص إلى شيء غير قابل للقراءة تمامًا وفقًا للاختبار الذي أجريته) ، ولكن تم إهمال ذلك واستبداله لاحقًا.

تحرير 2: فما باللك ، وثائق عفا عليها الزمن. adjustsFontSizeToFitWidth يحتاج minimumScaleFactor ، فقط تأكد من عدم اجتيازه 0 كحد أدنىScaleFactor (عدد صحيح ، 10/12 إرجاع 0). تغيير بسيط في القيمة baselineAdjustment أيضًا.

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

هنا هو كيفية إنشاء UILabel برمجيا ..

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. 
7
krushnsinh

سويفت 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
Alessandro Ornano
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

ل سويفت

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