iOS开发- UILabel 自动换行 及 高度自适应,iosuilabel
iOS开发- UILabel 自动换行 及 高度自适应,iosuilabel
主要是今天看到论坛有人问这个问题,帮忙解决之后, 顺便Mark下。
很简单, 代码写的很清楚。 直接上代码。
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 300, 50)]; label.text = @"今天下午全市多云到阴有阵雨或雷雨,今天夜里到明天阴有阵雨,雨量可达大雨。 东北风5-6级阵风7级,逐渐增强到6-7级阵风8级。 今天最高气温:26左右, 明晨最低气温:22左右。 今晨最低气温:21。 今日紫外线等级:2级,照射强度弱,适当防护。 明日洗车指数:4级,天气有雨,不宜洗车。"; //清空背景颜色 label.backgroundColor = [UIColor clearColor]; //设置字体颜色为白色 label.textColor = [UIColor whiteColor]; //设置label的背景色为黑色 label.backgroundColor = [UIColor blackColor]; //文字居中显示 label.textAlignment = UITextAlignmentCenter; //自动折行设置 label.lineBreakMode = UILineBreakModeWordWrap; label.numberOfLines = 0; //自适应高度 CGRect txtFrame = label.frame; label.frame = CGRectMake(10, 100, 300, txtFrame.size.height =[label.text boundingRectWithSize: CGSizeMake(txtFrame.size.width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:[NSDictionary dictionaryWithObjectsAndKeys:label.font,NSFontAttributeName, nil] context:nil].size.height); label.frame = CGRectMake(10, 100, 300, txtFrame.size.height); [self.view addSubview:label];
效果图:
背景:相信很多朋友都遇到过,文本的内容长度不一,需要根据内容的多少来自动换行处理。场景:很多APP中评论,有的评论长,有的评论短,有的一行,有的多行。下面以评论的实现为例来说说具体如何实现。技术点:UILabel的自动换行,自动换行的同时要自适应Frame大小。UITableView的行高自适应内容,实时调整高度。实现方法:UILabel的自动换行获取UILabel的frame大小获取UILabel的字体大小获取UILabel的文本内容根据上面的3部分数据,计算文本显示区域大小根据4计算的大小,实时改变UILabel的framecode如下: NSString * labelStr = @“你好,这是UILabel的自动换行测试内容,主要实现多行数据的自动换行,自适应不同行数的数据”; CGSize labelSize = {0, 0}; labelSize = [labelStrsizeWithFont:[UIFontsystemFontOfSize:14] constrainedToSize:CGSizeMake(200.0, 5000) lineBreakMode:UILineBreakModeWordWrap];//14 为UILabel的字体大小//200为UILabel的宽度,5000是预设的一个高度,表示在这个范围内 label.numberOfLines = 0;//表示label可以多行显示 label.lineBreakMode = UILineBreakModeCharacterWrap;//换行模式,与上面的计算保持一致。 label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, labelSize.height);//保持原来Label的位置和宽度,只是改变高度。UITableView的行高自适应内容这个和上面的类似,直接上Code:- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{NSString * labelStr = @“你好,这是UILabel的自动换行测试内容,主要实现多行数据的自动换行,自适应不同行数的数据”;CGSize labelSize = {0, 0};labelSize = [labelStrsizeWithFont:[UIFontsystemFontOfSize:14]constrainedToSize:CGSizeMake(200.0, 5000)lineBreakMode:UILineBreakModeWordWrap];//14 为UILabel的字体大小//200为UILabel的宽度,5000是预设的一个高度,表示在这个范围内return labelSize.height + delta;//delta 是Cell除了自适应控件UILabel外的其它控件所占的高度。}小结:实现上面2个技术点后,评论相关的APP或者类似的APP都可以做到自适应内容,根据内容多少自动换行,自动调整控件的位置和大小,达到最优的显示效果。
背景:相信很多朋友都遇到过,文本的内容长度不一,需要根据内容的多少来自动换行处理。场景:很多APP中评论,有的评论长,有的评论短,有的一行,有的多行。下面以评论的实现为例来说说具体如何实现。技术点:UILabel的自动换行,自动换行的同时要自适应Frame大小。UITableView的行高自适应内容,实时调整高度。实现方法:UILabel的自动换行获取UILabel的frame大小获取UILabel的字体大小获取UILabel的文本内容根据上面的3部分数据,计算文本显示区域大小根据4计算的大小,实时改变UILabel的framecode如下: NSString* labelStr =@“你好,这是UILabel的自动换行测试内容,主要实现多行数据的自动换行,自适应不同行数的数据”; CGSize labelSize ={0,0}; labelSize=[labelStrsizeWithFont:[UIFontsystemFontOfSize:14] constrainedToSize:CGSizeMake(200.0,5000) lineBreakMode:UILineBreakModeWordWrap];//14 为UILabel的字体大小//200为UILabel的宽度,5000是预设的一个高度,表示在这个范围内 label.numberOfLines=0;//表示label可以多行显示 label.lineBreakMode = UILineBreakModeCharacterWrap;//换行模式,与上面的计算保持一致。 label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, labelSize.height);//保持原来Label的位置和宽度,只是改变高度。UITableView的行高自适应内容这个和上面的类似,直接上Code:-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{NSString* labelStr =@“你好,这是UILabel的自动换行测试内容,主要实现多行数据的自动换行,自适应不同行数的数据”;CGSize labelSize ={0,0};labelSize=[labelStrsizeWithFont:[UIFontsystemFontOfSize:14]constrainedToSize:CGSizeMake(200.0,5000)lineBreakMode:UILineBreakModeWordWrap];//14 为UILabel的字体大小//200为UILabel的宽度,5000是预设的一个高度,表示在这个范围内returnlabelSize.height + delta;//delta 是Cell除了自适应控件UILabel外的其它控件所占的高度。}
用户评论