【问题标题】:sizeWithFont:constrainedToSize:lineBreakMode: not accurate?sizeWithFont:constrainedToSize:lineBreakMode: 不准确?
【发布时间】:2011-11-15 01:39:27
【问题描述】:

sizeWithFont:constrainedToSize:lineBreakMode: 似乎没有返回正确的宽度。执行这些代码后,我看到标签中的部分字符串被截断,这意味着我必须手动在大小上添加几个像素。我错过了什么吗?

我有一个 UILabel:

theLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, LABELWIDTH, LABELHEIGHT)];
theLabel.lineBreakMode = UILineBreakModeWordWrap;
theLabel.numberOfLines = 0;
[theLabel setFont:[UIFont fontWithName:@"MarkerFelt-Wide" size:16]];
theLabel.textColor = [UIColor blackColor];
theLabel.textAlignment =  UITextAlignmentLeft;
theLabel.backgroundColor = [UIColor clearColor];

我尝试使用以下代码以编程方式修改标签的大小:

CGSize maximumLabelSize = CGSizeMake(LABELWIDTH, 10000);

CGSize expectedLabelSize = [someString sizeWithFont:theLabel.font constrainedToSize:maximumLabelSize lineBreakMode:theLabel.lineBreakMode];

theLabel.text = someString;

CGRect newFrame = theLabel.frame;
newFrame.size.height = expectedLabelSize.height;
newFrame.size.width = newFrame.size.width+50;
theLabel.frame = newFrame;

【问题讨论】:

  • 嗯,首先someTextsomeString 应该是一样的。他们指向同一个 NSString 吗?
  • 是的。我进行了更改以使其更清晰。
  • 这是在 UITableViewCell 内部吗?
  • 嗨@Mr. Berna,我正在尝试使用 sizeToFit,但我仍然不确定为什么标签的大小总是更小,这会切掉里面的一部分文本。有什么想法吗?

标签: iphone ios


【解决方案1】:

好的,首先我要说的是,有一些非常有用的方法可以处理您目前没有使用的框架。比如你的代码,

CGRect newFrame = theLabel.frame;
newFrame.size.height = expectedLabelSize.height;
newFrame.size.width = newFrame.size.width+50;
theLabel.frame = newFrame;

可以用CGGeometry中的函数重写,

CGFloat widthOffset = 50.0f;
theLabel.frame = CGRectOffset(CGRectInset(theLabel.frame, widthOffset, 0.0f), widthOffset / 2.0f, 0.0f);

但是,如果您的代码按预期工作,则根本不需要这样做。你可以走两条路,

[theLabel sizeToFit];

或者,这也应该有效,

theLabel.frame = CGRectMake(theLabel.frame.origin.x, theLabel.frame.origin.y, expectedLabelSize.width, expectedLabelSize.height);

在您之前的代码中,您没有更改 theLabel 的宽度以匹配预期宽度。注意,你写了newFrame.size.width = newFrame.size.width+50,应该是newFrame.size.width = expectedLabelSize.width

【讨论】:

  • 我正在尝试使用 sizeToFit,但我仍然不确定为什么标签的大小总是更小,这会切掉里面的一部分文本。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2011-04-24
  • 2011-07-29
  • 2012-10-24
  • 2013-09-21
相关资源
最近更新 更多