如何在自动布局中使用 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?的主要内容,如果未能解决你的问题,请参考以下文章