UILabel:使用AutoLayout将字体大小调整为高度

我想有一个在另一个之下的几个标签。 大小与AutoLayout,我想有尽可能大的字体大小。 adjustsFontSizeToFitWidth只适用于宽度,但我得到以下结果

在这里输入图像说明

你可以通过调用重新计算你的内容高度(如果你的布局是作为tableview构build的话,可能会更容易一些,如果还没有的话):

 [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingExpandedSize].height; 

我也必须硬编码这个特定的目的(添加为UIFont类别):

 + (int)contentSizeHeightForItem { NSString *cat = [[UIApplication sharedApplication] preferredContentSizeCategory]; if([cat isEqualToString:UIContentSizeCategoryExtraSmall]) { return 84; } else if([cat isEqualToString:UIContentSizeCategorySmall]) { return 86; } else if([cat isEqualToString:UIContentSizeCategoryMedium]) { return 88; } else if([cat isEqualToString:UIContentSizeCategoryLarge]) { return 92; } else if([cat isEqualToString:UIContentSizeCategoryExtraLarge]) { return 94; } else if([cat isEqualToString:UIContentSizeCategoryExtraExtraLarge]) { return 98; } else if([cat isEqualToString:UIContentSizeCategoryExtraExtraExtraLarge]) { return 102; } return 80; } 

如果你的字体是不变的,你可以从字体中计算标签的必要高度,如下所示:

 UIFont *font = [UIFont fontWithName:@"Helvetica" size:18]; UILabel *label = [UILabel new]; [label setFont:font]; [view addSubview:label]; double labelHeight = font.pointSize + fabs(font.descender); [view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[label(labelHeight)]" options:0 metrics:@{@"labelHeight" : @(labelHeight)} views:@{@"label" : label}]]; 

这将确保在设置约束时将字体的全部高度考虑在内。