【问题标题】:UILabel automatic height as per the length iosUILabel 根据长度 ios 自动高度
【发布时间】:2015-09-05 01:01:50
【问题描述】:

我有一个 UICollectionView,如下所示。您可以看到 titleLabel 应该根据内容改变其高度。背景视图 labelView 也应该改变它的高度。我该怎么做?

我用过……

-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{

    CGSize constraint = CGSizeMake(textWidth, 20000.0f);
    CGRect rect = [text boundingRectWithSize:constraint
                       options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                    attributes:@{NSFontAttributeName:cell.titleLabel.font}
                       context:nil];
    CGFloat height = rect.size.height;

    height = ceilf(height);
//    NSLog(@"height %f", height);
    return height;
}

我用过这个……

CGRect newFrame = cell.titleLabel.frame;
      newFrame.size.height = height;
       cell.titleLabel.frame = newFrame;

我正在将新框架添加到标签上。但是高度从固定的 y 向下方增加。现在我必须根据高度提升 y。还有其他方法吗?

【问题讨论】:

标签: ios objective-c height uilabel


【解决方案1】:

方法来了

-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{

    CGSize constraint = CGSizeMake(textWidth, 20000.0f);
    CGRect rect = [text boundingRectWithSize:constraint
                       options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                    attributes:@{NSFontAttributeName:cell.titleLabel.font}
                       context:nil];
    CGFloat height = rect.size.height;

    height = ceilf(height);
//    NSLog(@"height %f", height);
    return height;
}

【讨论】:

  • [UIFont systemFontOfSize:14] 应替换为 cell.titleLabel.font
  • 我得到了高度。但是单元格中标签的高度没有改变。为什么会这样?
  • 我正在将新框架添加到标签上。但是高度从固定的 y 向下方增加。现在我必须根据高度提升 y。还有其他方法吗?获取高度不是我的要求。我必须按照图像中的方式对齐标签。如何做到这一点?请帮忙。
【解决方案2】:

使用ankit的代码获取标签所需的Height,如下图使用autoLayout。

添加一个 view ---> setleading,trailing and bottom constraint 相对于单元格 superView。

然后将标签作为子视图添加到此视图。添加所有四个约束。即,设置前导、尾随、顶部和底部约束

现在,使用上面 Ankit 的代码(我已经粘贴在下面)获取标签的高度,并将其设置为标签框架。

-(CGFloat) heightForText:(NSString *)text withWidth:(CGFloat) textWidth{

    CGSize constraint = CGSizeMake(textWidth, 20000.0f);
    CGRect rect = [text boundingRectWithSize:constraint
                       options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                    attributes:@{NSFontAttributeName:cell.titleLabel.font}
                       context:nil];
    CGFloat height = rect.size.height;

    height = ceilf(height);
//    NSLog(@"height %f", height);
    return height;
}

现在将新框架设置为标签。

CGRect newFrame = cell.titleLabel.frame;
      newFrame.size.height = height;
       cell.titleLabel.frame = newFrame;

希望它有效。一切都是为了正确设置自动布局。试试看,然后告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2021-08-12
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    相关资源
    最近更新 更多