Ios 带有NSAttribute字符串的UILabel正在剪切内容

Ios 带有NSAttribute字符串的UILabel正在剪切内容,ios,cocoa-touch,uilabel,Ios,Cocoa Touch,Uilabel,我已经用自动布局设置了一个UILabel,其高度取决于其固有的内容大小,因此当其中有更多行时,它会变得更高。我需要它与同一视图中的其他元素一起居中。默认情况下,一切正常 但是,我使用的自定义字体有点太大的空间。我设置了一个NSMutableParagraphStyle,如下所示: NSMutableParagraphStyle *headlineParagraphStyle = [NSMutableParagraphStyle new]; headlineParagraphStyle.lineS

我已经用自动布局设置了一个UILabel,其高度取决于其固有的内容大小,因此当其中有更多行时,它会变得更高。我需要它与同一视图中的其他元素一起居中。默认情况下,一切正常

但是,我使用的自定义字体有点太大的空间。我设置了一个NSMutableParagraphStyle,如下所示:

NSMutableParagraphStyle *headlineParagraphStyle = [NSMutableParagraphStyle new];
headlineParagraphStyle.lineSpacing = 0.0f;
headlineParagraphStyle.maximumLineHeight = 20.0f;
headlineParagraphStyle.hyphenationFactor = 0.0f;
headlineParagraphStyle.alignment = NSTextAlignmentLeft;
然后,我将创建一个NSAttributedString并将其设置为UILabel的
-attributedText

NSString *uppercaseHeadline = self.currentStory.headline.uppercaseString;
NSAttributedString *attributedHeadline = [[NSAttributedString alloc] initWithString:uppercaseHeadline attributes:@{NSParagraphStyleAttributeName: headlineParagraphStyle}];
self.headlineLabel.attributedText = attributedHeadline;
结果是文本看起来不错,但它被推到UILabel顶部上方,并在顶部被剪掉,而标签底部仍有额外的空间:

这也会使其他项目与此标签中的文本偏离中心,因为您可以看到两行之间的空间与标签框架的中心不对齐


如何让UILabel重新居中显示此文本,以便顶部不会被剪裁,底部没有任何空间?

我觉得链接到“奇异采访”很重要:


您可能需要编辑字体的ascender属性,请参见此处:

在iOS 7发布和该平台上的NDA解除后,我意识到我从未回来回答过这个问题。从iOS SDK 7.0开始,可以使用NSAttributeString属性
NSBaselineOffsetAttributeName
,这正是我需要做的

它在iOS 6中可用,但“不再受支持”。然而,当使用iOS7SDK构建时,它似乎做了正确的事情


编辑:如果不清楚,我不建议这样做。如果苹果说它不再受支持,那么依赖它可能不是一个好主意。这对我来说很管用,但绝对不是一个长期的解决方案。

我只是对这个问题有点疯狂。无论出于何种原因,使用
lineHeightMultiple
maximumLineHeight
和/或
minimumLineHeight
都会像这样吹扫偏移


但是,使用
行间距
(不是绝对值而是相对值)将更改行间距,而不会弄乱偏移量。

在iOS 10中,我的解决方案是只设置maximumLineHeight,而不设置minimumLineHeight(否则,标签顶部会被剪裁)。更改行距或线宽倍数没有任何帮助。

我从未设法使其正常工作。调整字体的上升和下降属性似乎对最终渲染没有影响。在iOS 10上同时设置
minimumLineHeight
maximumLineHeight
有一个问题,但这似乎在iOS 11中得到了解决