【问题标题】:UITextView correct line heightUITextView 正确的行高
【发布时间】:2021-05-04 01:55:50
【问题描述】:

我正在尝试手动调整 UITextView 的大小,使其完全适合某些文本。 (我知道这可以通过自动布局和禁用滚动来完成,但由于其他原因,这在这里不起作用。)我正确地考虑了 textContainerInsetlayoutMargins 但计算行高不起作用。

上面的图片显示了一个 120pt 的字体,据说行高是 120pt,但显然实际的行高是 145pts。问题是,我如何计算这个数字?

FWIW 我检查了,在该文本视图上设置的 NSParagraphStyle 对象没有什么有趣的,即lineHeightMultiplelineSpacingparagraphSpacing 都默认为 0.0。它是在情节提要中创建的,其布局属性均未在代码中更改。

编辑:我应该提到,大多数字体不会发生这种情况。我目前正在查看的字体称为 Sahar。

【问题讨论】:

  • 我确实发现了一些类似的问题(例如stackoverflow.com/questions/32764158/uitextview-line-height),但没有一个能准确解决这个问题。
  • "... 120pt 字体应该是 120pt 行高 ..." -- 我认为那句话中的关键词是“应该”。这个答案可能会给你一些见解:stackoverflow.com/a/33278748/6257435
  • 有趣的@DonMag。不幸的是,虽然 UIFont.lineHeight 值明显小于 UITV 使用的值,但这个计算出来的版本(pointSize + assender + descender)显然 大于 比 UITV 使用的值。

标签: ios uikit


【解决方案1】:

我在 Storyboard 中添加了一个UITextView 并将其字体设置为System Bold 120.0

然后,使用以下代码:

    guard let f = tv.font else {
        return
    }
    
    let l = f.leading
    let a = f.ascender
    let d = f.descender
    
    // descender is a negative value
    let calcLineHeight = l + a + (-d)

    // lineHeight property of font
    let fontLineHeight = f.lineHeight

    print("calculated height:", calcLineHeight)
    print("property height:  ", fontLineHeight)

我得到了这个输出(如预期的那样):

calculated height: 143.203125
property height:   143.203125

【讨论】:

  • 对不起,@DonMag — 我应该提到大多数字体不会发生这种情况。我更新了问题。
  • 自定义字体可能并不总是被正确定义/格式化。我拿了一个免费版本的 Sahar-Heavy,我得到的“计算高度”是 144。如果这不能满足您的需求,那么您可能需要描述您想要做什么。很可能有更好(更准确)的方法来确定您的文本需要多少空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多