UILabel 高度约束问题

今天在 iOS14 上遇到了 UILabel 高度异常的问题,具体的表现是:系统可能认为文本太多换行了,于是高度约束的值多了一行的高度。如图

错误的高度约束

文本确实没换行,但正确的情况应该是,Label 宽度明显是足够的,不应该多算一行高度。

当我减少一些字符,小于一个最大临界值时,高度就计算正常了,比如(删掉了一个字符)


文字少高度才正确

具体原因也不想去分析了,解决办法就是自己计算高度,自己修改高度约束

@interface TightLabel : UILabel
@end

@implementation TightLabel
- (void)layoutSubviews {
    [super layoutSubviews];
    [self.constraints enumerateObjectsUsingBlock:^(NSLayoutConstraint *obj, NSUInteger idx, BOOL *stop) {
        if (obj.firstItem == self && obj.firstAttribute == NSLayoutAttributeHeight) {
            NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
            style.lineBreakMode = self.lineBreakMode;
            style.alignment = self.textAlignment;
            
            CGRect bounds = [self.text boundingRectWithSize:CGSizeMake(CGRectGetWidth(self.bounds), CGFLOAT_MAX)
                                                    options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
                                                 attributes:@{ NSFontAttributeName: self.font, NSParagraphStyleAttributeName: style } context:nil];
            obj.constant = ceil(bounds.size.height) + 1;
            *stop = YES;
        }
    }];
}
@end

使用自定义的 TightLabel 替代系统的类,高度就不会有问题了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容