首页 > 其他分享 >iOS根据文字字数动态确定Label宽高

iOS根据文字字数动态确定Label宽高

时间:2023-08-23 13:00:59浏览次数:35  
标签:nameLabel 晴朗 frame iOS 宽高 Label content 今天天气 size

我们有时候在写项目的时候,会碰到,意见反馈,还有其他地方,讲座活动细则等需要大篇展示的文本,

因为每次服务器返回的内容大小不一,所以需要动态的调整label的宽高:

在ios 6 的时候可以:

-(void)creatLabel
{
    //根据文字 字数动态确定label宽高
    
    _nameLabel = [[UILabel alloc]init];
    
    _nameLabel.frame = CGRectMake(100, 100, 100, 40);
    
    _nameLabel.backgroundColor = [UIColor redColor];
    
    _nameLabel.text = @"菩提本无树";
    
    //设置label的字体  HelveticaNeue  Courier
    UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:24.0f];
    _nameLabel.font = font;
    //根据字体得到nsstring的尺寸
    CGSize size = [_nameLabel.text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil]];
    //名字的高
    CGFloat nameH = size.height;
    //名字的宽
    CGFloat nameW = size.width;
    
    _nameLabel.frame = CGRectMake(100, 100, nameW, nameH);
    
    [self.view addSubview:_nameLabel];
}

 

ios 7 的时候可以:

-(void)creatTextField
{
    //根据正文内容多少,动态确定正文content的frame
    
    _content = [[UILabel alloc]init];
    
    _content.frame = CGRectMake(17, 200, self.view.frame.size.width-34, 120);
    
    _content.backgroundColor = [UIColor redColor];
    
    _content.clipsToBounds = YES;
    
    _content.layer.cornerRadius = 10;
    
    _content.numberOfLines = 0;
    
    _content.layer.borderColor = [UIColor grayColor].CGColor;
    
    _content.layer.borderWidth = 0.8;
    
    _content.text = @"今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗今天天气好晴朗,今天天气好晴朗";
    
    //宽度
    CGFloat contentW = self.view.bounds.size.width - 34;
    
    //label的字体 HelveticaNeue  Courier
    UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:18.0f];
    
    _content.font = fnt;
    
    // iOS7中用以下方法替代过时的iOS6中的sizeWithFont:constrainedToSize:lineBreakMode:方法
    
    CGRect tmpRect = [_content.text boundingRectWithSize:CGSizeMake(contentW, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil] context:nil];

    // 高度H
    CGFloat contentH = tmpRect.size.height;
    
    NSLog(@"调整后的显示宽度:%f,显示高度:%f",contentW,contentH);
    
    _content.frame = CGRectMake(17, 200, contentW,contentH);
    
    [self.view addSubview:_content];
}

 

这样可以很好的解决这个问题!



作者:稻草人11223


标签:nameLabel,晴朗,frame,iOS,宽高,Label,content,今天天气,size
From: https://blog.51cto.com/u_13188203/7201459

相关文章

  • ios 调用系统应用的方法 应用间跳转的方法
    声明一个私有方法:#pragmamark-私有方法-(void)openUrl:(NSString*)urlStr{//注意url中包含协议名称,iOS根据协议确定调用哪个应用,例如发送邮件是“sms://”其中“//”可以省略写成“sms:”(其他协议也是如此)NSURL*url=[NSURLURLWithString:urlStr];UIApplica......
  • ios button标记
    在写项目的时候,for循环创建多个button,在需要设置背景图片和,需要标记所选中的button的需求,在这里提供两种方法:一:1:把for循环创建的button全部装到一个新建的数组中,把他们的点击事件都写在一个方法里,把button给传到方法中去,在button的点击方法里面遍历装有button的数组,让他显示没有被......
  • iOS 在UILabel显示不同的字体和颜色(转)
    在项目开发中,我们经常会遇到在这样一种情形:在一个UILabel使用不同的颜色或不同的字体来体现字符串,在iOS6以后我们可以很轻松的实现这一点,官方的API为我们提供了UILabel类的attributedText,使用不同颜色和不同字体的字符串,我们可以使用NSAttributedText和NSMutableAttributed......
  • ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
    在ios7中,UITableViewCell左侧会有默认15像素的空白。这时候,设置setSeparatorInset:UIEdgeInsetsZero能将空白去掉。但是在ios8中,设置setSeparatorInset:UIEdgeInsetsZero已经不起作用了。下面是解决办法首先在viewDidLoad方法加入以下代码: if([self.tableViewrespondsToSelect......
  • ios中利用NSDateComponents、NSDate、NSCalendar判断当前时间是否在一天的某个时间段
    应用中设置一般会存在这样的设置,如夜间勿扰模式,从8:00-23:00,此时如何判断当前时间是否在该时间段内。难点主要在于如何用NSDate生成一个8:00的时间和23:00的时间,然后用当前的时间跟这俩时间作对比就好了。下面提供两条思路:法1.用NSDate生成当前时间,然后转为字符串,从字符串中取出当前的......
  • iOS开发之--获取验证码倒计时及闪烁问题解决方案
    大家在做验证码的时候一般都会用到倒计时,基本上大家实现的方式都差不多,先贴出一些代码来..-(void)startTime{__blockinttimeout=59;//倒计时时间dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);dispatch_source......
  • ios开发之--NSNumber的使用
    什么是NSNumber?NSArray/NSDictionary中只能存放oc对象,不能存放基本数据类型,如果想把基本数据类型放进去,需要先把基本数据类型转换成OC对象,代码如下:inta=10;intx=100;floatf1=3.23f;doubled1=2.34;//int--->obj//numberWithInt把in......
  • ios开发之--UISearchDisplayController的简单使用
    控件就不介绍了,UISearchDisplayController就是把searbar和tableview结合到一块了,直接上代码:.h#import<UIKit/UIKit.h>@interfaceThirdViewController:UIViewController<UITableViewDelegate,UITableViewDataSource>{NSArray*_array;NSArray*_filterData;UI......
  • ios开发之--pop到指定页面
    1推出到根视图控制器[self.navigationControllerpopToRootViewControllerAnimated:YES];2推出到指定的视图控制器 for(UIViewController*controllerinself.navigationController.viewControllers){if([controllerisKindOfClass:[AViewControllerclass]]){......
  • ios开发之--ios11适配:TableView的heightForHeaderInSection设置高度无效/UISearchBar
    更新到ios11,然后使用x-code9运行项目,发现tableview的-(CGFloat)tableView:(UITableView*)tableViewheightForHeaderInSection:(NSInteger)section方法不走,所以页面也华丽丽的变成了一排的cell,通过查看文档和资料,原来是ios11默认开启self-sizing,把这个属性关系即可,具体代码如下:sel......