为何lineFragmentPadding无法改变NSLayoutManager的usedRect尺寸?
关于Apple文本布局API中lineFragmentPadding设为0的困惑解答
我当初啃Apple文本布局相关API的时候,也在这个lineFragmentPadding上卡过好久,太懂这种摸不着头脑的感觉了!
先给你放文档里那段重写属性的Objective-C示例代码:
- (CGFloat)lineFragmentPadding { return 0.0; }
文档里给出的设为0的原因,原文是这样的:
将行片段内边距设为0以获得精确的宽度测量值。(内边距在页面布局中用于防止文本容器中的文本与页面上的其他元素过于贴近……
这里我给你拆解一下逻辑:
- 默认情况下,
lineFragmentPadding有一个默认值(通常是5pt),这个值会作为额外空白加到每一行文本的左右两侧 - 如果你需要精确测量文本本身的实际宽度,这个默认的padding就会“掺水”——测出来的宽度会包含额外空白,不是文本真实占据的宽度。把它设为0,就能得到最精准的文本宽度数据
- 而文档里提到的页面布局场景,就是日常排版的常规需求:让文本和容器边框、旁边的图片/控件保持一点距离,避免挤在一起影响阅读体验,这时候用默认的padding值就刚好合适
内容的提问来源于stack exchange,提问作者suite22
相关产品推荐
相关产品推荐

