我在容器视图中使用了UILabel
。我完全以编程方式使用AutoLayout - 没有xib或故事板。我的numberOfLines
约束(没有高度约束集,大固定宽度,顶部和左边固定,NSMutableAttributedString.
= 0,超级视图底部固定到标签底部)完美地正常工作(大约13或14点) )大小的文字,但在大(60磅)大小的文字我开始注意到我的角色上方和下方的额外空间的大间隙;在这种情况下,大写字母“S”是attributes
此属性字符串的唯一UILabel
是字体名称和字距调整值1.0。下面的图片显示了我的Pixie标签的放大截图(显示的白色方块来自该程序),我的backgroundColor
的{{1}}为红色:
经过大量研究(Ignore Ascender and Descender when centering UILabel vertically?,iOS - Get the "real" height of a letter,Vertically center text in UILabel depending on actual visible letter height)后,我遇到此问题的原因似乎是因为此字体的上升和下降值不是'在这种情况下使用(这是一个大写“S”,所以看起来我只需要它的capHeight
值)。因此,我决定将我的标签高度限制为此值,并通过在设置“S”属性文本后将高度约束设置为等于capHeight
值来实现。这样做产生了以下图像:
如您所见,文本现在被剪切在标签中。作为一种黑客攻击,我想我会添加一些填充来抵消这种情况,因此将capHeight
值乘以1.1会产生以下图像:
这对于一些填充来说很好,但现在顶部有4 px的额外空间。我已经放大了很远,但我不确定为什么我会看到这个 - 我会认为,因为高度约束被设置为这个capHeight
值的高度(它有一些额外的添加现在填充)“S”将垂直居中。我试过在标签上调用setNeedsLayout
,但这没有做任何事情。这些是我想知道的事情:
capHeight
值没有返回正确的值和/或将标签的高度约束设置为此值会导致文本被裁剪?capHeight
值中添加填充?谢谢!