UILabel和numberOfLines和sizeToFit:

cha*_*bag 10 uilabel text-size sizetofit ios5

在iOS 5上.

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

我用numberOfLines属性和-sizeToFit

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

 CGRect titleFrame = [[self titleLabel] frame];
 [[self titleLabel] setNumberOfLines:0];
 [[self titleLabel] setText:newProductTitleText];
 [[self titleLabel] sizeToFit];
 CGRect newTitleFrame = [[self titleLabel] frame];
Run Code Online (Sandbox Code Playgroud)

CGRect就在那里,我可以在事后计算出事物.因此设置numberOfLines为0有效,并且不会更改框架中的原始origin.x,并且会将长文本分成多行,但不会将其约束为2行.将numberOfLines属性设置为2,当我阅读Apple文档时

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

似乎我应该能够将其设置为两个并仍然有效.我希望sizeToFit在扩展以适应所有文本时在正X和Y方向上扩展,但是当numberOfLines设置为0以外时它在负X方向上扩展.

ETA:"自动调整大小"的struts设置为上部和左侧以将其固定在最小x,y.

感谢您的任何见解.

Jos*_*own 0

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

    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;
    }
Run Code Online (Sandbox Code Playgroud)

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