【问题标题】:UILabel: Prevent method sizeToFit to modify width?UILabel:防止方法 sizeToFit 修改宽度?
【发布时间】:2013-12-12 01:01:27
【问题描述】:

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

#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];

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

[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 

【问题讨论】:

  • 您之前项目中的标签是否有宽度限制,或者对其父视图的左右两侧有限制?
  • 别这么认为,我正在自己实例化 UILabel。你能详细说明什么是宽度限制吗?
  • 宽度约束是定义对象宽度的 NSLayoutConstraint(自动布局系统的一部分)。
  • 知道了。如何在代码中添加宽度约束(或设置最小宽度)?根据我的研究,sizeToFit 可以将宽度设置为低于我最初设置的宽度。
  • 我不确定您是否需要添加约束。我试过你的代码,对我来说效果很好。你已经用你的框架给它一个固定的宽度。

标签: ios objective-c uikit uilabel


【解决方案1】:

sizeToFit 会根据您的文本将您的 UILabel 框架调整为可能的最小框架,而不管您之前手动设置的框架。只需使用 sizeToFit,然后获取框架,更改其宽度,并将其设置为 UILabel:

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

【讨论】:

  • 这是我使用的一个字符串示例,它引用了一句话:“利润之于企业,就像呼吸之于生活。呼吸对生活至关重要,但它不是生活的目的。同样,利润是公司存在的必要条件,但它们不是公司存在的理由”。这个 UILabel 的高度应该是 86,但它输出的是 203。
  • 不要使用 sizeToFit,而是尝试使用 CGSize aSize = [comment sizeThatFits:CGSizeMake(COMMENT_WIDTH, CGFLOAT_MAX)]; 然后 comment.frame = CGRectMake(0, 0, aSize.width, aSize.height); 这会产生任何不同的结果吗?
  • 我找到了答案。不知何故,它用字体大小 17 调整了我的标签大小(即使我专门将它设置为 12)。这就是为什么高度不成比例地大。
猜你喜欢
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 2013-12-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多