代码之家  ›  专栏  ›  技术社区  ›  meaning-matters

如何防止“UILabel”的文本顶部因行数或截断而改变?

  •  0
  • meaning-matters  · 技术社区  · 6 年前

    中文本的顶部 UILabel (s) (在表视图单元格上)似乎取决于行数和截断。

    enter image description here

    正如您在图像中所看到的,标签顶部(谁的背景我涂成灰色以指示发生了什么)与图像顶部保持固定距离。这是根据我添加的约束。

    然而,在显示的三个案例/单元格中,文本的顶部是8、7甚至11个像素。我怎样才能防止这种情况?

    我没有使用自定义字体。

    以下是限制条件:

    enter image description here

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  1
  •   LGP    6 年前

    更大的问题是约束 height <= 41 . 当标题不在两行内时 titleLabel 将尝试超过两行的高度(我猜在你的情况下大约是38?)然后在约束处停止 41 . 由于这略高于两行的高度,因此当行在其帧内居中时,第一行的顶部将降低几个像素。这解释了第一个和第三个示例之间的差异。

    一种可能的解决方案(尽管只有情节提要会更好)是在指定标签时测量标签的高度,并手动将高度约束更新为一行或两行高度。

    cell.titleLabel.text = @"your title";
    CGSize size = CGSizeMake(cell.titleLabel.bounds.size.width, 0);
    size = [cell.titleLabel sizeThatFits:size];
    
    if (size.height > lineHeight)
        cell.heightConstraint.constant = lineHeight * 2;
    else
        cell.heightConstraint.constant = lineHeight;
    

    这个 heightConstraint 连接到您的高度约束,您需要将其更改为 = 类型计算 lineHeight 例如,可以在初始化时为标签指定一个短常量字符串,然后对其进行测量。

    至于第一个和第二个示例之间的差异,除了在上面的else语句中添加一个常量之外,我没有任何解决方案。是的,它很难看,需要在不同的设备上进行测试,看看它是否有效。或者你可以接受1像素的差异。。。?

        2
  •  -1
  •   Ankur Lahiry    6 年前

    label.sizeToFit 根据尺寸适合标签。删除约束条件 height<=41