在iOS 5上。
我有一个最初放在nib中的UILabel元素。我希望x位置保持不变。我要它选一条线,或者两条线。如果超过两行,则应该使用换行设置来显示省略号。
我使用numberOfLines属性和-sizeToFit
如果我将UILabel的numberOfLines属性设置为0,它将正确地看到对于某些文本,没有足够的空间并在调用-sizeToFit后将其包装到第二行,但是在很少的情况下,这一行足够长到可以延伸到3行,我得到了三行,这是我不想要的。如果我将numberOfLines属性设置为2,它实际上将整件事情延伸到一行,并将我在nib中设置的初始帧拉长得更宽。
CGRect titleFrame = [[self titleLabel] frame];
[[self titleLabel] setNumberOfLines:0];
[[self titleLabel] setText:newProductTitleText];
[[self titleLabel] sizeToFit];
CGRect newTitleFrame = [[self titleLabel] frame];CGRect只是为了让我能够计算出事实之后的事情。因此,将numberOfLines设置为0是可行的,并且不会更改框架中的原始Source.x,并且会将长文本分解为多行,但不会将其限制为2行。将numberOfLines属性设置为2,当我读取Apple时,该属性设置为2
此属性控制要使用的最大行数,以便将标签的文本与其边界矩形相匹配。此属性的默认值为1。若要删除任何最大值限制,并根据需要使用尽可能多的行,请将此属性的值设置为0。
看来我应该可以把这个设成两个,而且还能工作。当展开以适应所有文本时,我期望sizeToFit向正X和Y方向展开,但是当numberOfLines设置为0时,它是以负X方向展开的。
ETA:将"Autosize“支柱设置为上下两部分,以便将其修正为最小x,y。
谢谢你的见解。
发布于 2013-03-15 17:36:34
我遇到了一个类似的问题,当-[UILabel sizeToFit]设置为2时,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;
}正如您所看到的,我也希望我的标签有一个最小的高度,因为-sizeToFit经常使标签变得很小,但是如果您不关心最小高度,那么您可以忽略这些代码。titleMaxHeight的“神奇数字”40来自实验,并发现带有这种字体的2行标签实际上只需要40 of。在此代码中,-sizeToFit主要用于将文本保持在宽度内,并确定当文本字符串较短时,初始高度40是否可以降低。
发布于 2013-09-05 14:58:40
我使用了UIFont属性lineHeight:
CGFloat labelHeight = label.font.lineHeight*label.numberOfLines;https://stackoverflow.com/questions/12328077
复制相似问题