如何防止 `UILabel` 的文本顶部根据行数或截断而改变?
How prevent `UILabel`'s text top to change depending on number of lines or truncation?
UILabel
(s) 中的文本顶部(在 table 视图单元格上)似乎取决于行数和截断。
正如您在图像中看到的那样,标签的顶部(我将其背景涂成灰色以指示发生了什么)与图像顶部保持固定距离。这是根据我添加的约束。
然而,在显示的三个 cases/cells 中,文本的顶部是 8、7 甚至 11 个像素。我怎样才能防止这种情况发生?
我没有使用自定义字体。
约束条件如下:
label.sizeToFit
根据大小适合标签。删除约束 height<=41
更大的问题是约束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 个像素的差异...?
UILabel
(s) 中的文本顶部(在 table 视图单元格上)似乎取决于行数和截断。
正如您在图像中看到的那样,标签的顶部(我将其背景涂成灰色以指示发生了什么)与图像顶部保持固定距离。这是根据我添加的约束。
然而,在显示的三个 cases/cells 中,文本的顶部是 8、7 甚至 11 个像素。我怎样才能防止这种情况发生?
我没有使用自定义字体。
约束条件如下:
label.sizeToFit
根据大小适合标签。删除约束 height<=41
更大的问题是约束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 个像素的差异...?