【问题标题】:How to get label's height when text goes multiple lines [duplicate]文本多行时如何获取标签的高度[重复]
【发布时间】:2013-08-08 10:02:27
【问题描述】:

我正在以编程方式在表格单元格单击的详细视图中创建标签。a我正在相应地设置文本并为此设置标签高度。这是我的代码:

NSString *mytitleString = [discussionData valueForKey:@"Name"];
 CGSize size =  [mytitleString sizeWithFont:[UIFont systemFontOfSize:14.0]  constrainedToSize:CGSizeMake(500, CGFLOAT_MAX)];
 float lbltitleheight = size.height;
 lbltitle.text = mytitleString;

但问题是如果标签是多行,我无法设置标签的高度。我如何做到这一点?

【问题讨论】:

  • 好的,你添加两个语句...... label_mission.lineBreakMode = UILineBreakModeWordWrap; label_mission.numberOfLines = 0;

标签: iphone ios objective-c uilabel


【解决方案1】:

为什么不能设置标签大小? 您是否尝试将标签设置为多行:

NSString *mytitleString = [discussionData valueForKey:@"Name"];
CGSize size =  [mytitleString sizeWithFont:[UIFont systemFontOfSize:14.0]  
                         constrainedToSize:CGSizeMake(500, CGFLOAT_MAX) 
                             lineBreakMode:lbltitle.lineBreakMode];
lbltitle.frame = (CGRect){.oririn = lbltitle.frame.origin, .size = size};
lbltitle.numberOfLines = 0;
lbltitle.text = mytitleString;

我也建议不要使用方法sizeToFit,因为当你多次调用它时——标签可能会变得太窄。

【讨论】:

    【解决方案2】:

    你也可以使用

    label.numberOfLines = 0; // allows label to have as many lines as needed
    label.text = @"some long text";
    [label sizeToFit];
    NSLog(@"Label's frame is: %@", NSStringFromCGRect(label.frame));
    

    大小会相应调整的地方。

    或者您只需动态地增加UILabel的高度。 sizeWithFont constrainedToSize:lineBreakMode: 是要使用的方法。

    //Calculate the expected size based on the font and linebreak mode of your label
    // FLT_MAX here simply means no constraint in height
    CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);
    
    CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   
    
    //adjust the label the the new height.
    CGRect newFrame = yourLabel.frame;
    newFrame.size.height = expectedLabelSize.height;
    yourLabel.frame = newFrame;
    

    【讨论】:

      【解决方案3】:

      请试试这个:

      CGFloat height=[mytitleString sizeWithFont:[UIFont fontWithName:@"Arial" size:14] constrainedToSize:CGSizeMake(500, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap].height;
      

      希望这会对你有所帮助。

      【讨论】:

        【解决方案4】:

        你可以试试这个

         lbltitle.text = mytitleString;
         lbltitle.numberOfLines=0;
            [lbltitle sizeToFit];
        

        【讨论】:

          【解决方案5】:

          试试这个:

          UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 34.0)];
          [label setBackgroundColor:[UIColor clearColor]];
          [label setNumberOfLines:0];
          label.adjustsFontSizeToFitWidth = YES;
          label.minimumFontSize = 10.0;
          [label setTextColor:[UIColor blackColor]];
          [label setFont:[UIFont fontWithName:@"YourFont" size:15]];
          [label setTextAlignment:UITextAlignmentCenter];
          [label setText:yourText];
          

          【讨论】:

            【解决方案6】:
            CGRect rect_mission = CGRectMake(0, stringSize.height + stringSize_award.height+ 190, 280, stringSize_mission.height+60);
            

            【讨论】:

              【解决方案7】:

              您的代码是正确的,但您需要将 numberOfLines 设置为 0。因为它默认为 1。

              lbltitle.numberOfLines = 0;
              

              【讨论】:

                【解决方案8】:

                您的代码应该可以正常工作。 尝试更改标签的numberOfLines 并将其设置为可以扩展的最大数量。

                【讨论】:

                  【解决方案9】:
                      CGFloat height=[yourlable sizeWithFont:[UIFont fontWithName:@"Arial" size:31] constrainedToSize:CGSizeMake(yourlable.frame.size.width,1000) lineBreakMode:UILineBreakModeWordWrap].height; 
                  

                  你得到标签的动态高度。

                  【讨论】:

                    猜你喜欢
                    • 2012-02-22
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-12-25
                    • 1970-01-01
                    • 2012-09-07
                    • 2014-08-08
                    • 2016-10-31
                    相关资源
                    最近更新 更多