Ios5 UILabel、numberOfLines和sizeToFit:

Ios5 UILabel、numberOfLines和sizeToFit:,ios5,uilabel,text-size,sizetofit,Ios5,Uilabel,Text Size,Sizetofit,在iOS 5上 我有一个最初放在nib中的UILabel元素。我希望x的位置保持不变。我希望它可以是1行,也可以是2行。如果超过两行,则应使用换行设置来显示省略号 我使用numberOfLines属性和-sizeToFit 如果我将UILabel的numberOfLines属性设置为0,它将正确地看到,对于某些文本,没有足够的空间,并在调用-sizeToFit后将其包装为第二行,但在极少数情况下,该行足够长,可以延伸到3行,我会得到三行,这是我不想要的。如果我将numberOfLines属性设置

在iOS 5上

我有一个最初放在nib中的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];
CGRect就在那里,我可以在事后计算。因此,将
numberOfLines
设置为0会起作用,并且不会更改框架中的原始原点.x,并且会将长文本分成多行,但不会将其限制为2行。将
numberOfLines
属性设置为2,当我阅读苹果文档时

此属性控制用于将标签文本放入其边框的最大行数。此属性的默认值为1。若要删除任何最大限制,并根据需要使用尽可能多的行,请将此属性的值设置为0

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

ETA:“自动调整尺寸”支柱设置为左上角,以将其固定在最小x、y位置


感谢您的帮助。

我遇到了一个类似的问题,
-[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;
    }
CGFloat titleMaxWidth=200;
CGFloat滴定单位重量=30;
CGFloat titleMaxHeight=40;
UILabel*titleLabel=[[UILabel alloc]initWithFrame:CGRectMake(10,5,titleMaxWidth,titleMaxHeight)];//或者,您可以在笔尖中执行此操作
titleLabel.numberOfLines=0;
titleLabel.text=@“使用此技术可以适当调整标题标签的大小。”;
titleLabel.font=[UIFont boldSystemFontOfSize:16];
[标题标签大小合适];
titleLabel.numberOfLines=2;
if(标题标签高度>标题最大高度)
{
titleLabel.height=titleMaxHeight;
}
否则如果(标题标签高度<标题高度)
{
titleLabel.height=titleMinHeight;
}

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

我使用了UIFont属性lineHeight:

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

我认为这条线索可能会有所帮助这是一个老问题,可能与当前的iOS无关,但我不认为这是一个重复的问题。我读到一个问题,这个问题声称这是一个重复的,这是一个不同的问题。这个问题是关于负X由
-sizeToFit
设置,而不是关于在UILabel中垂直对齐文本。