bug天天有,今天又遇到一个令我头疼不已的bug,接手别人的项目,发现传过来的字符串在同一个label上,有的能自动换行,有的不能。着实费了一番手脚;
ABCD四个选项都用的是同一个label,传过来的字符串有的能换行,有的不能,打印高度,C选项的高度已经变了,到了换行的高度,但是字符串却没有换行,感觉就好比是一个父亲生了两个儿子,其中一个儿子不是亲生的一样。
看打印的高度和渲染的高度不一样,,下面是代码
self.textLabel.text = _option;
NSLog(@"self.textLabel.text----%@",_option);
CGFloat padding = [[LEPreferenceService sharedService] paddingSize];
CGRect screenRect = [UIScreen mainScreen].bounds;
CGFloat screenWidth = screenRect.size.width;
CGFloat labelWidth = screenWidth - padding*2.0 - self.textLabelLeadingConstraint.constant - self.textLabelTrailingConstraint.constant;
CGRect labelRect = [self.textLabel.text boundingRectWithSize:CGSizeMake(labelWidth, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:self.textLabel.font} context:nil];
CGFloat labelHeight = labelRect.size.height;
self.textLabelHeightConstraint.constant = labelHeight;
NSLog(@"labelHeight----%f",labelHeight);
如果把labelHeight增加1的高度,问题就解决了,我查了资料,网上说是Xcode8之后label对于文字计算出现了变化,网友给的建议是增加下面两句代码:
// self.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
// self.textLabel.adjustsFontForContentSizeCategory = YES;
我尝试了一下,确实能解决本界面的bug,但是另外一个界面还是没有换行(两个界面都是用的同一个label),后来我增加了下面一句代码:
self.textLabel.adjustsFontSizeToFitWidth = YES;
发现所有的问题都解决了。
不过到现在还是没弄懂,为啥用的是同一个label,都是同一个计算方法,传过来的字符串有的能换行有的却不能换行呢?如果有哪个朋友也遇到这个问题,希望能发表一下自己的见解,大家交流交流。
期待...