uilabel 自行撑开高度_iOS UIlabel高度自适应总结。UITextView根据内容自动改变frame。...

本文总结了iOS中UILabel如何根据内容自行撑开高度,并介绍了UITextView如何根据文字内容自动改变其frame。通过设置UILabel的numberOfLines为0,配合特定的尺寸计算方法,可以实现UILabel的高度自适应。对于UITextView,使用`textViewDidChange:`代理方法结合`sizeThatFits:`可以动态调整其高度以适应内容。
摘要由CSDN通过智能技术生成

-(void)initUserInterface

{

UILabel *label = [[UILabel alloc]init];

label.numberOfLines = 0; // 需要把显示行数设置成无限制

label.font = [UIFont systemFontOfSize:15];

label.textAlignment = NSTextAlignmentCenter;

label.text = @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

CGSize size = [self sizeWithString:label.text font:label.font];

label.bounds = CGRectMake(0, 0, size.width, size.height);

label.center = self.view.center;

[self.view addSubview:label];

}

// 定义成方法方便多个label调用 增加代码的复用性

-(CGSize)sizeWithString:(NSString *)string font:(UIFont *)font

{

CGRect rect = [string boundingRectWithSize:CGSizeMake(320, 8000)//限制最大的宽度和高度

options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin//采用换行模式

attributes:@{NSFontAttributeName: font}//传人的字体字典

context:nil];

return rect.size;

}

方法二:

CGRect contentRect = [NSString heightForString:badgeValue Size:contentSize Font:kValueFont];

//获取某固定文本的显示高度

+(CGRect)heightForString:(NSString*)str Size:(CGSize)size Font:(UIFont*)font

{

return [NSString heightForString:str Size:size Font:font Lines:0];

}

+(CGRect)heightForString:(NSString*)str Size:(CGSize)size Font:(UIFont*)font Lines:(NSInteger)lines

{

if (StringIsNullOrEmpty(str)) {

return CGRectMake(0, 0, 0, 0);

}

static UILabel *lbtext;

if (lbtext==nil) {

lbtext = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];

}else{

lbtext.frame=CGRectMake(0, 0, size.width, size.height);

}

lbtext.font=font;

lbtext.text=str;

lbtext.numberOfLines=lines;

CGRect rect= [lbtext textRectForBounds:lbtext.frame limitedToNumberOfLines:lines];

if(rect.size.height<0)

rect.size.height=0;

if (rect.size.width<0) {

rect.size.width=0;

}

return rect;

}

/**

@return 根据字符串的的长度来计算UITextView的高度

*/

+(float)heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width

{

float height = [[NSString stringWithFormat:@"%@\n",value] boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:fontSize],NSFontAttributeName, nil] context:nil].size.height;

return height;

}

/**

UITextView根据内容自动改变frame

*/

(void)textViewDidChange:(UITextView *)textView

{

[textView flashScrollIndicators]; // 闪动滚动条

static CGFloat maxHeight = 130.0f;

CGRect frame = textView.frame;

CGSize constraintSize = CGSizeMake(frame.size.width, MAXFLOAT);

CGSize size = [textView sizeThatFits:constraintSize];

if (size.height >= maxHeight)

{

size.height = maxHeight;

textView.scrollEnabled = YES; // 允许滚动

}

else

{

textView.scrollEnabled = NO; // 不允许滚动,当textview的大小足以容纳它的text的时候,需要设置scrollEnabed为NO,否则会出现光标乱滚动的情况

}

textView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, size.height);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值