【问题标题】:UILabel and numberOfLines and sizeToFit: [duplicate]UILabel 和 numberOfLines 和 sizeToFit:[重复]
【发布时间】:2012-09-01 22:13:21
【问题描述】:

在 iOS 5 上。

我有一个最初放置在笔尖中的 UILabel 元素。我希望 x 位置保持固定。我希望它采用 1 行或 2 行。如果多于两行,则应使用换行设置来显示省略号。

我使用numberOfLines 属性和-sizeToFit

如果我将 UILabel 的 numberOfLines 属性设置为 0,它将正确地看到对于某些文本,没有足够的空间并在调用 -sizeToFit 后将其换行到第二行,但在极少数情况下,该行足够长到 3 行,我得到了 3 行,这是我不想要的。如果我将 numberOfLines 属性设置为 2,它实际上会将整个东西拉伸到一条线上,并将我在笔尖中设置的初始框架拉长得更宽。

 CGRect titleFrame = [[self titleLabel] frame];
 [[self titleLabel] setNumberOfLines:0];
 [[self titleLabel] setText:newProductTitleText];
 [[self titleLabel] sizeToFit];
 CGRect newTitleFrame = [[self titleLabel] frame];

CGRect 只是为了让我能够在事后进行计算。因此将numberOfLines 设置为0 有效,并且不会更改框架中的原始origin.x,并且会将长文本分成多行,但不会将其限制为2 行。将numberOfLines 属性设置为 2,当我阅读 Apple 文档时

此属性控制要使用的最大行数,以使标签的文本适合其边界矩形。此属性的默认值为 1。要删除任何最大限​​制并根据需要使用尽可能多的行,请将此属性的值设置为 0。

看来我应该可以将其设置为两个并且仍然可以正常工作。我希望sizeToFit 在展开以适合所有文本时会在 X 和 Y 正方向上展开,但当 numberOfLines 设置为非 0 时它会在 X 方向负方向上展开。

ETA:“Autosize”支柱设置为左上角以将其固定在最小 x,y 处。

感谢您的任何见解。

【问题讨论】:

  • 我认为这个帖子可能对stackoverflow.com/questions/5041874/…有帮助
  • 这是一个老问题,可能与当前的 iOS 无关,但我看不出它是如何重复的。我读了一个声称这是重复的问题,这是一个不同的问题。这个问题询问-sizeToFit 设置的负 X,而不是 UILabel 中的垂直对齐文本。

标签: ios5 uilabel text-size sizetofit


【解决方案1】:

我遇到了类似的问题,-[UILabel sizeToFit] 不遵守我在 numberOfLines 设置为 2 时设置的最大宽度。以下是我解决该问题的方法:

    CGFloat titleMaxWidth = 200;
    CGFloat titleMinHeight = 30;
    CGFloat titleMaxHeight = 40;
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, titleMaxWidth, titleMaxHeight)]; // alternatively, you could do this in a nib
    titleLabel.numberOfLines = 0;
    titleLabel.text = @"The title label will be sized appropriately with this technique.";
    titleLabel.font = [UIFont boldSystemFontOfSize:16];
    [titleLabel sizeToFit];
    titleLabel.numberOfLines = 2;
    if (titleLabel.height > titleMaxHeight)
    {
        titleLabel.height = titleMaxHeight;
    }
    else if (titleLabel.height < titleMinHeight)
    {
        titleLabel.height = titleMinHeight;
    }

如您所见,我还想要标签的最小高度,因为-sizeToFit 通常会使标签非常小,但如果您不关心最小高度,则可以忽略该代码。 titleMaxHeight 的“幻数”40 来自实验,发现使用这种字体的 2 行标签实际上只需要 40px。在这段代码中,-sizeToFit主要用于保持文本在宽度内,判断当我们有一个短字符串时,初始高度40是否可以减小。

【讨论】:

    【解决方案2】:

    我使用了 UIFont 属性 lineHeight:

    CGFloat labelHeight = label.font.lineHeight*label.numberOfLines;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-02
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多