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}]];
这将确保在设置约束时将字体的全部高度考虑在内。