我有一个设置了约束的UIlabel。左侧和右侧以及垂直中心的约束被设置为标签。父视图宽度是动态的,意味着可以更宽或更宽,但高度是静态的。标签将设置一些长或短的文本。 我还设置了最小字体大小,以便字体不会换行并仅将其设置为一行。由于我设置了最小字体大小,因此文本高度会自动调整以适应文本,但问题是文本不是垂直居中而是位于UI标签的底部。 我试图调整UIlabel的高度,但我不能根据新的字体大小和何时设置新的大小来调整大小。我通过获取字体大小并动态设置高度来尝试解决方案,而不是导致意外结果。我在iOS 6上运行它。
答案 0 :(得分:0)
我自己想通了。以下是示例代码
+(void)autoFontResizeLabel:(UILabel*)label inView:(UIView*)containerView{
NSString *text = label.text;
//determine the font size
CGFloat actualFontSize;
[text sizeWithFont:label.font
minFontSize:18
actualFontSize:&actualFontSize
forWidth:label.bounds.size.width
lineBreakMode:label.lineBreakMode];
//reset the label content and frame
[label setText:@""];
[label setText:text];
//turn off auto adjust to allow new text with correct font
label.adjustsFontSizeToFitWidth = NO;
[label setFont:[UIFont fontWithName:@"HelveticaNeue" size:actualFontSize]];
//optional
[label sizeToFit];
CGSize barSize = containerView.frame.size;
CGFloat titleY = fabsf(barSize.height - label.frame.size.height)/2;
[label setFrame:CGRectMake(label.frame.origin.x, titleY, label.frame.size.width, label.frame.size.height)];
}