如何在自动布局中使用 NSLineBreakByTruncatingMiddle 和 sizeToFit 实现 Multiline UILabel?

Posted

技术标签:

【中文标题】如何在自动布局中使用 NSLineBreakByTruncatingMiddle 和 sizeToFit 实现 Multiline UILabel?【英文标题】:How can i achieve Multiline UILabel with NSLineBreakByTruncatingMiddle and sizeToFit in autolayout? 【发布时间】:2013-06-28 06:26:25 【问题描述】:

我有一个两行 UILabel。我想要它的换行模式 NSLineBreakByTruncatingMiddle。我遇到的问题是,如果文本足够小以适合一行,则将其显示在标签中间而不是顶部。我正在使用 ios6 和自动布局,所以 sizeToFit 不适合我。 我怎样才能做到这一点?我想如果文本小到适合一行,它应该垂直顶部对齐。 我尝试过this,但它会截断并仅在一行而不是两行中显示文本。

【问题讨论】:

【参考方案1】:

您需要计算所需的尺寸并更新标签的框架:

CGSize s = [myLabelString sizeWithFont:...
                     constrainedToSize:CGSizeMake(..., MAXFLOAT)
                         lineBreakMode:NSLineBreakByTruncatingMiddle];

无论您的标签使用什么字体及其宽度。

【讨论】:

如果你的答案是正确的,但还有一件事是,如果我采用 NSAttributedString,它的截断文本只有一行,尽管它占用了两行的大小。我还尝试在 NSAttributedString 中设置 NSParagraphStyle 的换行模式,但没有奏效。你也可以更新一下吗? 使用属性字符串,你应该得到boundingRectWithSize:options:context:的大小。 嗨 wain,我正在使用 boundingRectWithSize:options:context: 获取大小,但如果文本大于一行,它仍然会在一行中截断属性字符串。我应该如何使用两行标签,NSAttributedString、NSLineBreakByTruncatingMiddle 和 sizeThatFits? 标签的行数你设置了吗? 你现在直接设置标签大小?这可能是一个与边框相关的问题,标签实际上没有足够的空间来呈现文本,因为它的框架可能暗示。因此,您可能需要将框架设置得更大一些。

以上是关于如何在自动布局中使用 NSLineBreakByTruncatingMiddle 和 sizeToFit 实现 Multiline UILabel?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局在 iOS 中根据文本长度更改 UILabel 宽度

如何在代码中获取自动布局中使用的标准间距值?

如何使用自动布局在 MKAnnotation 中显示多行?

如何在 iOS 8 中使用自动布局和自动调整单元格大小

如何在 JGraphX 中自动调用有机布局

在滚动视图中使用自动布局缩放图像如何居中?