在iOS 7中增加动态文本高度时,UILabel无法获得多行

时间:2014-03-27 07:46:40

标签: ios objective-c ios7 uilabel

我正在开发一个应用程序,我正在获取动态文本,我必须根据文本动态增加标签的高度,并根据标签高度增加和减少表格单元格的高度。所以我为iOS 6和iOS7编写了代码,它在iOS 6中运行良好,但在iOS7中运行不正常。下面是代码。返回文本高度的函数。

- (CGSize)getSizeOfText:(NSString *)text withFont:(UIFont *)font widthOftext:(int )txtWidth
{



  CGSize boundingSize = CGSizeMake(txtWidth, 1000);
CGSize size;
if (MyDelegate.isIos7)
{

    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                          font, NSFontAttributeName,
                                          nil];

    CGRect frame = [text boundingRectWithSize:boundingSize
                                      options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                   attributes:attributesDictionary
                                      context:nil];

    return frame.size;
}
else
{
    CGSize requiredSize = [text sizeWithFont:font constrainedToSize:boundingSize lineBreakMode:UILineBreakModeWordWrap];
    size=requiredSize;
}

return size;
}

iOS 6和iOS 7的高度返回有点变化。 低于前四个标签的文本高度差异。

iOS6的

  1. 42.000000
  2. 42.000000
  3. 21.000000
  4. 42.000000
  5. iOS7

    1. 39.674072
    2. 39.674072
    3. 20.123291
    4. 39.674072
    5. 您可以看到前四个文本的位差异。但iOS中的一个主要问题是它总是只在一行显示文本并截断文本,甚至文本高度变为39,可能有2行,我还将行数设置为20,并尝试将数字行设置为只有0但没有用。

      如果有人已经遇到过这类问题,请指导我。感谢

      被修改 我之前已经发布过这个问题,如果有人想看到两个iOS结果的屏幕截图,那么也请检查。 Same Thread with Screen Shots

4 个答案:

答案 0 :(得分:1)

尝试将此属性设置为标签

  

label.numberOfLines = 3;

它应该解决问题,让我知道。

答案 1 :(得分:0)

将标签的高度设置为frame.size.height+1或将其向上舍入。 当然要确保标签的numberOfLines是3(如果您认为可以显示超过3,则为0)。

答案 2 :(得分:0)

尝试以这种方式使用UITableView动态更改单元格的高度。这对我来说也适用于IOS7和IOS6

At   -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {

        NSString *cellText=yourtextstring;
        UIFont *cellFont = [UIFont fontWithName:@"SourceSansPro-Bold" size:13.0];
        CGSize constraintSize = CGSizeMake(300.0f, MAXFLOAT);//225
        CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
                    //NSLog(@"*** labelSize.height *** %f",labelSize.height);
        return labelSize.height+250; //change this as per your need
    }

  At   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *cellText=yourtextstring;
        UIFont *cellFont=[UIFont fontWithName:@"SourceSansPro-Regular" size:13.0];
        CGSize constraintSize=CGSizeMake(300,MAXFLOAT);
        CGSize txtViewSize=[cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];

        CGRect frame=cell.yourlabel.frame;

     //   frame.size.width=300;
        frame.size.height=txtViewSize.height+150;
        cell.yourlabel.frame=frame;

        cell.yourlabe.text=cellText;
        return cell;
    }

希望它可以帮助你..

答案 3 :(得分:0)

无需比较iOS 6和iOS 7 使用如下


  CGFloat txtWidth = 250.0f;
  NSString *font = @"Noteworthy-Bold"; //say u hav font
  NSString *text = @"Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text"; //say u hav some text
 UIFont *labelFont = [UIFont fontWithName:font size:15];
 NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObject:labelFont forKey:NSFontAttributeName];
 NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text attributes:attributesDictionary];
 CGRect frame = [attributedText boundingRectWithSize:(CGSize){txtWidth, MAXFLOAT}
                                           options: (NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                           context:nil];//you need to specify the some width, height will be calculated
 CGSize requiredSize = frame.size;
 NSLog(@"wdth->%f height->%f",requiredSize.width,requiredSize.width);
 //248.962509 height->248.962509 //iOS 7
 //248.962494 height->248.962494 //iOS 6
 //almost same 
 //also set 'numberOfLines` property of label