ios - 设置动态 UILabel 高度

标签 ios objective-c uilabel cgrect

我有一个带有表格 View 的应用程序需要支持动态单元格高度。在单元格的 layoutSubviews 方法中,我正在为我的 UILabel 控件生成一个框架,它们是单元格中唯一动态大小的控件。

出于某种原因,从以下方法返回的宽度小于应有的宽度,文本被截断,但仅限于短文本,例如一个单词。宽度应保持为作为初始帧传入的宽度。

也就是说,我的方法需要完成的是调整标签的大小以适合所有文本,同时保持预设宽度。

这是我使用的代码:

- (CGRect)getLabelSizeForText:(NSString*)text withInitialRect:(CGRect)labelFrame andFontSize:(CGFloat)fontSize{
    CGSize constrainedSize = CGSizeMake(labelFrame.size.width, MAXFLOAT);
    NSDictionary *attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:fontSize], NSFontAttributeName, nil];
    CGSize requiredSize = [text boundingRectWithSize:constrainedSize
                                             options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
                                          attributes:attributesDict context:nil].size;

    CGRect adjustedFrameRect = CGRectMake(labelFrame.origin.x, labelFrame.origin.y, requiredSize.width, requiredSize.height);

    return adjustedFrameRect;
}

最佳答案

这对我有用,

+ (CGSize)textSizeForText:(NSString *)text {

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat width = screenWidth - kPaddingRight;
CGSize maxSize = CGSizeMake(width, CGFLOAT_MAX);

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 2.5;
NSDictionary *dict = @{NSParagraphStyleAttributeName : paragraphStyle, NSFontAttributeName: [UIFont systemFontOfSize:15] };
[attributedString addAttributes:dict range:NSMakeRange(0, text.length)];

CGRect paragraphRect = [attributedString boundingRectWithSize:maxSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) context:nil];


return paragraphRect.size;

关于ios - 设置动态 UILabel 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28027919/

相关文章:

ios - 如何在首次加载时选择 UIPickerView 中的第一行?

ios - 使用 `boundingRectWithSize` 对齐动态帧中的 UILabel 时出现问题

iphone - 图标没有出现在 Xcode 存档中?

ios - 为iPhone和iPad开发同一个应用程序:针对每种设备类型针对所有应用程序开发一个应用程序还是针对两个应用程序开发两个应用程序?

objective-c - 如何让 iAd 在我的应用程序中被全局查看?

iphone - UITabBar 中的自定义颜色

ios - UISlider 的 Avplayer 问题

ios - 在 TableView 中显示从数组到数组标签的数据

autolayout - UILabel 子类 - 自定义 'drawRect' 方法导致文本被截断/不显示

ios - 试图用现有的主键值 'Item' 创建一个类型为 '1' 的对象