我具有以下单元格设计,其中数字标签会缩小,而“Overall”标签位于其正下方。

我已经正确设置了adjustFontSizeToFitWidthminimumFontSize属性。字体大小正确调整。然而,将数字标签 anchor 定在底部是具有挑战性的。特别是当字体缩小时,两个标签之间的间隙会加宽,并且不会垂直居中。

我尝试了sizeToFitsizeThatFits,并使用了字体的pointSize。全部失败。

我知道sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:,但是不明白为什么我需要结合adjustFontSizeToFitWidth来使用它。

最佳答案

嗯,所以您想将UILabels放置在容器 View 的中间(水平和垂直方向)?

我已改写了我的答案,这样对将来的读者会更有意义。

我的代码假设您已经设置了3个IBOutlets:

UIView *containerView; //Your nice view containing the two textfields.
UILabel *points; //The label containing the number.
UILabel *overall; //The textfield containing the text 'overall'.

您可以在分配文本并调用sizeToFit之后,简单地设置标签的框架。
  • 这第一行将UILabel点定位,唯一的变化是y坐标是containerView的一半减去其高度的一半。
    points.frame = CGRectMake(points.frame.origin.x, (containerView.frame.size.height / 2) - (points.frame.size.height / 2), points.frame.size.width, points.frame.size.height);
    
  • 要相应地定位overall-假设数字和整体标签之间的距离为6。
    int space = 6;
    
    overall.frame = CGRectMake(overall.frame.origin.x, points.frame.origin.y + points.frame.size.height + space, overall.frame.size.width, overall.frame.size.height);
    
  • 阅读您的评论后,我认为您正在寻求这种解决方案。如果您想让UILabels都出现在中间,像这样从(overall.frame.size.height / 2) + (space / 2)的y值中减去points(其下面的数字为2):
    int space = 6;
    points.frame = CGRectMake(points.frame.origin.x, ((containerView.frame.size.height / 2) - (points.frame.size.height / 2)) - ((overall.frame.size.height / 2) + (space / 2)), points.frame.size.width, points.frame.size.height);
    overall.frame = CGRectMake(overall.frame.origin.x, points.frame.origin.y + points.frame.size.height + space, overall.frame.size.width, overall.frame.size.height);
    

  • 最后一点将产生类似于此图像的输出。如您所见,蓝线是整个图像的一半,并且在其中间点与黑色矩形(紧紧围绕两个标签)相交。我希望这就是你所追求的。

    10-01 23:04