以编程方式创buildUILabel

我知道这应该是非常简单的,但我一直在努力创build一个UILabel编程,并得到它的行为,我希望的方式。

我想要的只是能够创build一个标签,设置最大属性,高度,宽度和字体大小,然后让文本变小和/或只是截断文本,以适应长串文本。

假设我希望标签的文字宽度最大为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! 即使我将高度和文字大小值更改为极端大小,此代码也会创build一些不能调整的固定大小的标签。 我似乎能做的更小的是宽度。

我一定要过去看一些基本的东西,但是我真的不知道如何得到我想要的结果,也不明白为什么我会得到我所得到的行为。

以下工作?

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

编辑:我相信你可能会遇到使用adjustsFontSizeToFitWidthminimumScaleFactor两个问题。 前者说你还需要设置一个minimumFontWidth (另一方面,根据我的testing,它可能会缩小到一些非常不可读的状态),但是这已经被弃用了,而被后来的版本所取代。

编辑2:没关系,过时的文档。 adjustsFontSizeToFitWidth需要minimumScaleFactor ,只要确定不能传递0作为minimumScaleFactor(整数除法,10/12返回0)。 baselineAdjustment值的变化也很小。

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

这里是如何以编程方式创buildUILabel

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

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) 

为了迅速

 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) 
 UILabel *mycoollabel=[[UILabel alloc]initWithFrame:CGRectMake(10, 70, 50, 50)]; mycoollabel.text=@"I am cool"; // for multiple lines,if text lenght is long use next line mycoollabel.numberOfLines=0; [self.View addSubView:mycoollabel]; 
 UILabel *label = [UIlabel alloc] init]; label.Frame = CGRectMake(0,20,100,50); label.Backgroundcolor = [UIColor whiteColor]; label.text = @"Hello"; [self.view addSubView:label];