【问题标题】:UILabel text gets cut offUILabel 文本被截断
【发布时间】: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 让它正常工作。用大量文本检查,标签大小调整为魅力。

标签: objective-c ios cocoa-touch


【解决方案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 是正确的,应该这样做。我混淆了参数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2018-10-02
      • 2011-11-02
      • 2013-12-23
      • 1970-01-01
      相关资源
      最近更新 更多