如何在添加高度约束后使用程序化约束垂直居中UILabel中的文本

时间:2016-04-01 02:16:22

标签: ios autolayout uilabel uifont

我在容器视图中使用了UILabel。我完全以编程方式使用AutoLayout - 没有xib或故事板。我的numberOfLines约束(没有高度约束集,大固定宽度,顶部和左边固定,NSMutableAttributedString. = 0,超级视图底部固定到标签底部)完美地正常工作(大约13或14点) )大小的文字,但在大(60磅)大小的文字我开始注意到我的角色上方和下方的额外空间的大间隙;在这种情况下,大写字母“S”是attributes此属性字符串的唯一UILabel是字体名称和字距调整值1.0。下面的图片显示了我的Pixie标签的放大截图(显示的白色方块来自该程序),我的backgroundColor的{​​{1}}为红色:

enter image description here

经过大量研究(Ignore Ascender and Descender when centering UILabel vertically?iOS - Get the "real" height of a letterVertically center text in UILabel depending on actual visible letter height)后,我遇到此问题的原因似乎是因为此字体的上升和下降值不是'在这种情况下使用(这是一个大写“S”,所以看起来我只需要它的capHeight值)。因此,我决定将我的标签高度限制为此值,并通过在设置“S”属性文本后将高度约束设置为等于capHeight值来实现。这样做产生了以下图像:

enter image description here

如您所见,文本现在被剪切在标签中。作为一种黑客攻击,我想我会添加一些填充来抵消这种情况,因此将capHeight值乘以1.1会产生以下图像:

enter image description here

这对于一些填充来说很好,但现在顶部有4 px的额外空间。我已经放大了很远,但我不确定为什么我会看到这个 - 我会认为,因为高度约束被设置为这个capHeight值的高度(它有一些额外的添加现在填充)“S”将垂直居中。我试过在标签上调用setNeedsLayout,但这没有做任何事情。这些是我想知道的事情:

  1. 为什么capHeight值没有返回正确的值和/或将标签的高度约束设置为此值会导致文本被裁剪?
  2. 为什么我需要在capHeight值中添加填充?
  3. 在添加填充和/或为什么不自动发生之后,有没有人对如何将此文本垂直居中有任何建议?我看到了这个答案(https://stackoverflow.com/a/17376146/482557),但不确定这是否适用于此。
  4. 谢谢!

0 个答案:

没有答案
相关问题