Xcode8之后label只适应高度问题

bug天天有,今天又遇到一个令我头疼不已的bug,接手别人的项目,发现传过来的字符串在同一个label上,有的能自动换行,有的不能。着实费了一番手脚;

Xcode8之后label只适应高度问题_第1张图片
11.png

ABCD四个选项都用的是同一个label,传过来的字符串有的能换行,有的不能,打印高度,C选项的高度已经变了,到了换行的高度,但是字符串却没有换行,感觉就好比是一个父亲生了两个儿子,其中一个儿子不是亲生的一样。


Xcode8之后label只适应高度问题_第2张图片
E4F95E94DA7AFB56C7FD0BD452957BF8.jpg

看打印的高度和渲染的高度不一样,,下面是代码

    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,都是同一个计算方法,传过来的字符串有的能换行有的却不能换行呢?如果有哪个朋友也遇到这个问题,希望能发表一下自己的见解,大家交流交流。
期待...

你可能感兴趣的:(Xcode8之后label只适应高度问题)