为自动布局设置数字 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 以正确计算内在内容大小的主要内容,如果未能解决你的问题,请参考以下文章