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

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

【问题讨论】:

    标签: objective-c ios6 uilabel autolayout


    【解决方案1】:

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

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

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

    【讨论】:

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