为自动布局设置数字 UILabel 以正确计算内在内容大小

Posted

技术标签:

【中文标题】为自动布局设置数字 UILabel 以正确计算内在内容大小【英文标题】:Set numeric UILabel for Auto Layout to correctly compute the intrinsic content size 【发布时间】:2017-05-10 12:01:24 【问题描述】:

我有一个UILabel,字体大小为50,文字为1。在运行时,其文本会更改为其他数字。

如果我把它放在superview 的中心,自动检测到的(固有内容大小)高度比实际文本大很多,这是因为它尽量不裁剪其他较低的字符,如g .

问题是我知道我不会使用除数字以外的其他字符。我也不想为它设置一个固定的高度约束。

【问题讨论】:

为什么不将行数设置为1? 设置为1 UIFont 指标包括上升、下降、大写高度、x 高度等...所有这些都决定了字符如何适合容器(这是一个很好的图表cocoanetics.com/2010/02/understanding-uifont)。如果您真的想要获取单个字符“字形”的高度(和/或宽度),则需要使用 Core Text。那里有很多讨论和示例代码......很好的起点是搜索CTFontCreatePathForGlyph @DonMag,我使用了一种解决方法来摆脱这个要求,但你的解决方案似乎是解决方案,并且链接的网站有一些很好的信息,请将其发布为答案。 作为答案发布(包含更多细节)。 【参考方案1】:

UIFont 指标包括上升、下降、大写高度、x 高度等...所有这些都决定了字符如何适合容器。这里有很好的解释和图表:http://cocoanetics.com/2010/02/understanding-uifont

如果您真的想获得单个字符“字形”的高度(和/或宽度),则需要使用 Core Text。这将包括调用CTFontGetGlyphsForCharacters()CTFontCreatePathForGlyph() 来获取“字形路径”(CGPath 对象),此时您可以获取“边界框”来确定确切的大小。

那里有很多讨论和示例代码...一个很好的起点就是搜索CTFontCreatePathForGlyph

【讨论】:

以上是关于为自动布局设置数字 UILabel 以正确计算内在内容大小的主要内容,如果未能解决你的问题,请参考以下文章

自动布局和 UILabel 的问题

UILabel 自动布局适合

手动设置UILabel宽度自动布局的高度

文本为空字符串时,自动布局UILabel的动态高度计算不起作用?

如何使用自动布局约束为移动 UILabel 设置动画?

如何使用自动布局将 UILabel 设置为 UICell 宽度的百分比