首先声明的是
系统label的文字在垂直方向,只支持居中
1.参考:
UILabel的高度和宽度自适应
异:
高度的要写numberOfLines(换行)
宽度不用写numberOfLines
同:
==
1.都要写
sizeToFit
2.都是通过
label的frame来拿最终的宽高
ps:
+ (UILabel *)getSizeToFitHeightOfLabelWithX:(CGFloat)x
y:(CGFloat)y
immobilizationWidth:(CGFloat)immobilizationWidth
title:(NSString *)title
{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, immobilizationWidth, 0)];
label.text = title;
//
label.font = [UIFont systemFontOfSize:default_font];
label.numberOfLines = 0;
[label sizeToFit];
return label;
}
+ (UILabel *)getSizeToFitWidthOfLabelWithX:(CGFloat)x
y:(CGFloat)y
title:(NSString *)title {
/*
经过调试,只要有sizeTofit,Label的宽高初始值即使给得再离谱,系统也会调回来,不过想想也正常,毕竟sizeTofit嘛(也就是说能对sizeTofit造成杀伤的只有label的文字和字体大小)
*/
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x, y, 1000, 0)];
label.font = [UIFont systemFontOfSize:default_font];
label.text = title;
[label sizeToFit];
return label;
}
2.另一种解决label自适应宽度的方法(貌似适应不了高度)
//根据文字字体大小,多少,和初始x轴,更新该label的大小和位置,并且是在label赋值之后
- (void)updateLabelTextSite:(UILabel *)label textSize:(CGFloat)textSize orignX:(CGFloat)orignX{
//不用autoLayout调这东西太蛋疼了
// 设置Label的字体 HelveticaNeue Courier
UIFont *fnt = [UIFont fontWithName:@"HelveticaNeue" size:textSize];//24.0f
label.font = fnt;
// 根据字体得到NSString的尺寸
CGSize size = [label.text sizeWithAttributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil]];
// 名字的H
CGFloat nameH = size.height;
// 名字的W
CGFloat nameW = size.width;
label.frame = CGRectMake(orignX,
0, nameW,nameH);
}
比较麻烦不是很建议
3.label使用sizeToFit的小注意
- (void)viewDidLoad {
[super viewDidLoad];
_a = [[UILabel alloc] initWithFrame:CGRectMake(8, 100,100, 30)];
_a.font = [UIFont systemFontOfSize:29];
_a.backgroundColor = [UIColor yellowColor];
// [self.view addSubview:_a];
[self.testUIView addSubview:_a];
_a.text = @"memedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemedamemeda";
//前
_a.numberOfLines = 0;
//后
[_a sizeToFit];
}
正常来讲是以下的效果:
numberOfLines一定要写在sizeToFit的前面
否则
label的文字过多就直接不显示了(看到一下子懵了,好神奇的说,sizeToFit不了,直接放大招,不显示了?)
不过再去看看图层还是是可以看的到的
ps:即使numberOfLines写在了后面,如果label的text文字没那么多,那么变态,虽然没有适配,但是还是可以显示的
上面分析的有点乱,记住这一句就行:numberOfLines一定要写在sizeToFit的前面
网友评论