2012-09-08 131 views
9

在iOS 5.的UILabel和numberOfLines和sizeToFit:

我有最初放置在笔尖一个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可以工作,并且不会更改帧中的原始origin.x,并且会将长文本分成多行,但不会将其限制为2行。设置numberOfLines属性为2,当我读苹果文档

此属性控制,以适应标签的文本到它的边框采用的最大行数。此属性的默认值是1。要删除任何上限,并根据需要使用尽可能多的行,这个属性的值设置为0

看来我应该能够集这两个仍有它的工作。我希望sizeToFit扩大,以适合所有文本时,在一个积极的X和Y方向扩展,但它是在负X方向上扩展时numberOfLines被设置为非0

ETA:在“自动调整”支柱是设置为上和左,以固定在最小x,y。

感谢您的任何见解。

+0

我觉得这个线程可以帮助http://stackoverflow.com/questions/5041874/uilabels-sizetofit-sizethatfits-ignore-the-numberoflines-property/13786846 #13786846 –

+2

这是一个老问题,可能与当前iOS不相关,但我不明白它是如何重复的。我读了这个问题,声称这是一个重复的问题,这是一个不同的问题。这个问题是关于“-sizeToFit”设置的负X,而不是关于垂直对齐UILabel中的文本。 – chadbag

回答

0

我有哪里-[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通常使标签非常小,但如果您不关心最小高度,则可以忽略该代码。标题MaxHeight的“幻数”为40,来自实验,发现带有这种字体的2行标签实际上只需要40px。在此代码中,-sizeToFit主要用于将文本保留在宽度内,并确定当我们有短文本字符串时是否可以减少40的初始高度。

0

我用UIFont属性lineHeight是:

CGFloat labelHeight = label.font.lineHeight*label.numberOfLines; 
相关问题