Ios5 UILabel、numberOfLines和sizeToFit:
在iOS 5上 我有一个最初放在nib中的UILabel元素。我希望x的位置保持不变。我希望它可以是1行,也可以是2行。如果超过两行,则应使用换行设置来显示省略号 我使用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属性设置
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中垂直对齐文本。