UILabel 文本被截断
Posted
技术标签:
【中文标题】UILabel 文本被截断【英文标题】:UILabel text gets cut off 【发布时间】:2012-11-26 07:22:07 【问题描述】:我正在尝试动态设置标签大小。它以一种奇怪的方式工作,我截断了一些文本。 我首先设置我的标签文本,然后尝试像这样调整它的大小。
_switch2Label.text = @"Call on alarm, there will be no call if other user of alarm system will recieve an alarm call and confirm (answer) it by pressing 0#";
_switch2Label.numberOfLines = 0;
[self newFrame:_switch2Label];
- (void) newFrame:(UILabel *) label
CGSize maxSize = self.view.bounds.size;
maxSize.width = maxSize.width - 30;
CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];
CGRect newFrame = label.frame;
newFrame.size.height = labelSize.height;
label.frame = newFrame;
我只得到三行文本,而这个标签需要五行。也许有人可以在这里看到我的错误?如果我在标签上添加更多文本,它会显示出来,但仍有大约两行标签文本被截断。
【问题讨论】:
尝试将maxSize改为MAXFLOAT,maxSize = CGSizeMake(MAXFOAT,self.view.bounds.size.width-30); 试试这个-maxSize.width = label.frame.size.width; Rahul,确实有效,写下这个作为答案,我会接受。如果可以的话 - 你能解释一下,为什么是宽度?我的高度计算错误,而不是宽度,所以我有点不清楚。 你的宽度没问题。为 maxSize.height 传递一个大数字。返回的高度将是需要的。 由于某种原因,它并不好。传递大数字也无济于事。我再重复一遍,我通过更改 maxSize.width = label.frame.size.width 让它正常工作。用大量文本检查,标签大小调整为魅力。 【参考方案1】:我已经改变了你的方法...请检查它..它可能会帮助你..
- (void) newFrame:(UILabel *) label
CGSize constraint = CGSizeMake(300, 1000.0f);
CGSize size_txt_overview1 = [label.text sizeWithFont:[UIFont fontWithName:@"Arial Rounded MT Bold" size:15] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
label.frame = CGRectMake(20,20, size_txt_overview1.width, size_txt_overview1.height+15);
【讨论】:
【参考方案2】: _switch2Label.text = @"Call on alarm, there will be no call if other user of alarm system will recieve an alarm call and confirm (answer) it by pressing 0#,";
_switch2Label.numberOfLines = 0;
[self newFrame:_switch2Label];
- (void) newFrame:(UILabel *) label
CGSize maximumSize = CGSizeMake(label.frame.size.width, 10000);
//maxSize.width = maxSize.width - 30;
CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maximumSize lineBreakMode:UILineBreakModeWordWrap];
CGRect newFrame = label.frame;
newFrame.size.height = labelSize.height;
label.frame = newFrame;
使用这个代码块,可能对你有帮助。
【讨论】:
为什么要使用lines:
方法呢?只需将numberOfLines
设置为0即可。只要设置了标签的高度,它就会正常显示。
hmmm,你是 ri8,我编辑了我的答案。谢谢你的建议。
工作答案也是如此。感谢您的时间!不过之前有正确的答案,所以我会更早地接受。【参考方案3】:
为什么要以编程方式调整标签大小?这是您在 IB 或使用 autorezizeMask 时无法做到的事情吗?
【讨论】:
【参考方案4】:标签的约束大小未按您的预期计算,目前,您的代码将标签高度限制为视图边界的高度。将您的 maxSize 实例更改为:
CGSize maxSize = CGSizeMake(self.view.bounds.size.width - 30, MAXFLOAT);
CGSize labelSize = ...
这样做将确保约束不受视图边界的约束。如果您希望标签能够超出视图的边界,您可能还需要考虑设置视图的 clipsToBounds 属性。
【讨论】:
对不起,按照你的方式尝试过,但是这样它根本不会调整大小。请看 Rahul 的评论,这样我就可以正常工作了。 @Datenshi 抱歉,向第二个参数发送了错误的值。编辑以包含正确的代码。 这些值是向后的。CGSizeMake
接受宽度,高度,而不是高度,宽度。
@Datenshi,rmaddy 是正确的,应该这样做。我混淆了参数。以上是关于UILabel 文本被截断的主要内容,如果未能解决你的问题,请参考以下文章