2013-12-12 66 views
0

我试图让我的UILabel自动调整其高度以适应不同的输入字符串。虽然调用sizeToFIt确实重新调整了UILabel的大小,但它也重新调整了它的宽度!我需要一个统一的宽度,因此我有COMMENT_WIDTH不变。奇怪的部分是我在以前的项目中使用完全相同的代码,并且在调用该方法后,其宽度保持不变。有任何想法吗?UILabel:防止方法sizeToFit修改宽度?

#define COMMENT_WIDTH 209 

UILabel *comment  = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, COMMENT_WIDTH, CGFLOAT_MAX)]; 
comment.font   = [UIFont fontWithName:@"System" size:12.0f]; 
comment.numberOfLines = 200; 
comment.text   = quote.content; 
comment.lineBreakMode = NSLineBreakByWordWrapping; 

[comment sizeToFit]; 

我做了一个NSLog前后sizeToFit方法,这里是我的一些输出不同的字符串输入。请注意,宽度和高度会发生变化。

[2013-12-11 17:58:52.911 Inspyr[37855:70b] Before width: 209.000000, height : 340282346638528859811704183484516925440.000000 

[2013-12-11 17:58:52.911 Inspyr[37855:70b] After width: 111.000000, height : 21.000000 

2013-12-11 17:58:52.911 Inspyr[37855:70b] Before width: 209.000000, height : 340282346638528859811704183484516925440.000000 

2013-12-11 17:58:52.911 Inspyr[37855:70b] After width: 36.000000, height : 21.000000 
+0

难道你以前的项目标签的宽度约束或约束的左侧和它的父的右侧? – rdelmar

+0

不要这么想,我正在自行实例化UILabel。你能详细说明宽度约束是什么吗? – blee908

+0

宽度约束是定义对象宽度的NSLayoutConstraint(自动布局系统的一部分)。 – rdelmar

回答

0

sizeToFit会将您的UILabel帧的大小调整为尽可能考虑您的文本的最小帧,而不管您之前手动设置的帧。只要使用sizeToFit,然后拿到框架,改变它的宽度,将其设置为的UILabel:

[comment sizeToFit]; 
CGRect newCommentFrame = comment.frame; 
newCommentFrame.size.width = COMMENT_WIDTH; 
comment.frame = newCommentFrame; 
+0

这里有一个我用过的字符串的例子,它的引用是:“利润是生意的,因为呼吸是生命,呼吸对生活是必不可少的,但它不是生活的目的。同样,利润对公司的存在是必不可少的,但它们不是其存在的原因“。这个UILabel的高度应该是86,但是它输出了203. – blee908

+0

而不是使用sizeToFit,尝试使用'CGSize aSize = [comment sizeThatFits:CGSizeMake(COMMENT_WIDTH,CGFLOAT_MAX)];'然后'comment.frame = CGRectMake(0, 0,aSize.width,aSize.height);'这是否产生任何不同的结果? – Rufel

+0

我找出答案。不知何故,它正在调整我的标签,字体大小为17,(即使我专门将它设置为12)。这就是为什么高度不成比例的原因。 – blee908