首页 > 代码库 > 根据NSString字符串长度自动改变UILabel的frame
根据NSString字符串长度自动改变UILabel的frame
相信大家都遇到过这种需求。如果一个不慎,容易做成这个模样:
话不多说,上代码。
1.首先,设置UILabel的相关属性
1 UILabel *tmpLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, [UIScreen mainScreen].bounds.size.width - 20, 20)]; 2 [tmpLabel setNumberOfLines:0]; 3 [self.view addSubview:tmpLabel];
就这些?就这些。只需要初始化,只需要设置行数为0,也就是行数无上限(自动换行)就可以添加到父视图上了。其他的UILabel的属性你想设置就设置,不想设置就设置上面这些就可以。
2.根据字符串NSString获得UILabel的frame
2.1 UILabel宽度不变,改变高度
1 //宽度不变,根据字的多少计算label的高度 2 NSString *str = @"可以更改此内容进行测试,宽度不变,高度根据内容自动调节"; 3 CGSize size = [str sizeWithFont:tmpLabel.font constrainedToSize:CGSizeMake(tmpLabel.frame.size.width, MAXFLOAT) lineBreakMode:NSLineBreakByWordWrapping]; 4 //根据计算结果重新设置UILabel的尺寸 5 [tmpLabel setFrame:CGRectMake(tmpLabel.frame.origin.x,tmpLabel.frame.origin.y, size.height, size.height)];
6 [tmpLabel setText:str];
使用sizeWithFont方法来获得CGSize。其中,宽度我们设置为我们UILabel的width;高度设置为MAXFLOAT,一个宏,代表CGFloat最大值;lineBreakMode设置为NSLineBreakByWordWrapping。这样就可以设置UILabel宽度不变,高度根据NSString改变了。
2.2 UILabel高度不变,改变宽度
1 //高度固定不折行,根据字的多少计算label的宽度 2 NSString *str = @"高度不变获取宽度,获取字符串不折行单行显示时所需要的长度"; 3 CGSize size = [str sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, label.frame.size.height)];
4 //根据计算结果重新设置UILabel的尺寸 5 [label setFrame:CGRectMake(tmpLabel.frame.origin.x,tmpLabel.frame.origin.y, size.width, size.height)];
6 label.text = str;
同样的设置。唯一的不同在于我们不需要设置折行模式了。这样就设置成为UILabel高度不变,改变宽度了。
3.如果是iOS7.0之后,它会提示你sizeWithFit这个方法被废弃了。提示我们使用下面的方法替代:
1 //宽度不变,根据字的多少计算label的高度 2 NSString *str = @"可以更改此内容进行测试,宽度不变,高度根据内容自动调节"; 3 CGSize textSize = [str boundingRectWithSize:CGSizeMake(tmpLabel.frame.size.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:tmpLabel.font} context:nil].size;
改为boundingRectWithSize这个方法来改变字符串长度。通过更改options的参数NSStringDrawingOptions来决定是高固定改变宽度还是宽固定改变高度。
根据NSString字符串长度自动改变UILabel的frame
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。