11

我已经设置了一个带有自动布局的 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 顶部上方并在顶部被剪掉,而标签底部仍有额外空间:UIL标签剪裁

这也会使其他项目相对于该标签中的文本居中,因为您可以看到两行之间的空间与标签框架的中心不一致。

我怎样才能告诉 UILabel 重新定位此文本,以便顶部不会剪辑并且底部没有任何空间?

4

5 回答 5

3

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

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

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

于 2014-05-04T05:38:35.660 回答
3

我刚刚经历了一次疯狂的旅程。无论出于何种原因,使用lineHeightMultiple,maximumLineHeight和/或minimumLineHeight像这样破坏偏移量。

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

于 2015-06-30T19:27:33.300 回答
3

在 iOS 10 中,我的解决方案是只设置 maximumLineHeight 而不是设置 minimumLineHeight(否则,标签的顶部会被剪掉)。更改 lineSpacing 或 lineHeightMultiple 没有帮助。

于 2017-05-26T02:33:37.083 回答
2

我觉得链接到“奇怪的采访”很重要:http: //i.imgur.com/pFeqPHd.gif

您可能需要编辑字体的上行属性,请参见此处:UIButton 自定义字体垂直对齐

于 2013-09-09T02:23:26.830 回答
0

在我的情况下 numberOfLines = 0 是需要的,否则,违反直觉,换行符后的行被剪断

于 2021-10-07T13:44:24.850 回答