使用adjustsFontSizeToFitWidth确定UILabel高度以进行居中

时间:2013-02-14 15:08:00

标签: ios objective-c uilabel

我有以下单元格设计,其中数字标签缩小,“整体”标签直接位于下方。

enter image description here

我已正确设置adjustFontSizeToFitWidthminimumFontSize属性。字体正确调整大小。但是,将数字标签锚定到底部是一项挑战。特别是当字体缩小时,两个标签之间的间隙变宽并且不会垂直居中。

我尝试了sizeToFitsizeThatFits,并使用了字体pointSize。一切都没有成功。

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

2 个答案:

答案 0 :(得分:2)

啊,你想将UILabels放在容器视图的中间(水平和垂直)?

我已经改写了我的回答,这对未来的读者会更有意义。

我的代码假设你已经设置了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后设置标签的框架。

  1. 第一行定位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);
    
  2. 相应地定位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);
    
  3. 阅读完您的评论后,我认为您已经解决了这个问题。如果你想让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);
    
  4. 最后一点将产生类似此图像的输出。如您所见,蓝线是整个图像的一半,并在其中点与黑色矩形(两个标签周围紧贴)相交。我希望这就是你所追求的。

    image depicting effect

答案 1 :(得分:0)

而不是使用两个标签,而是使用CATextLayer。您可以轻松地将一部分变为BOLD而另一部分正常。相对于放置两个标签,一层的位置和调整大小将是容易的。阴影设置,换行模式,字体,你将能够精美地调整一切:)