在 boundingRectWithSize:options:context: 中使用 NSStringDrawingUsesLineFragmentOrigin: 获得额外的空白空间

Posted

技术标签:

【中文标题】在 boundingRectWithSize:options:context: 中使用 NSStringDrawingUsesLineFragmentOrigin: 获得额外的空白空间【英文标题】:Using NSStringDrawingUsesLineFragmentOrigin in boundingRectWithSize:options:context: gets extra blank space 【发布时间】:2014-05-30 08:28:14 【问题描述】:

我在 ios 7 中使用 boundingRectWithSize:options:context: 来尝试计算 UITableViewCell 中文本的动态高度。但是,使用这种方法和NSStringDrawingUsesLineFragmentOrigin 作为选项,我总是在底部和顶部获得一些额外的空间。如果我切换到NSStringDrawingUsesDeviceMetrics,则单词不会在行尾换行。这是截图:

对于一些包含更多文本的行,空间会更大。我该如何解决这个问题?我使用以下代码来获取包含文本的 UILabel 框架的大小:

- (CGSize)sizeWithMaxSize:(CGSize)constrainedSize andFontSize:(CGFloat)fontSize 
    self.paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    self.paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
    NSDictionary *dictionary = @NSFontAttributeName: [UIFont systemFontOfSize:fontSize],
                             NSParagraphStyleAttributeName: self.paragraphStyle.copy,
                             NSForegroundColorAttributeName:[UIColor blackColor];
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:self attributes:dictionary];
    CGRect frame = [attributedString boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];
    return frame.size;
;

【问题讨论】:

我也有同样的问题。你发现问题了吗? 你有什么运气吗?我也有同样的问题。 【参考方案1】:

如果你 OR 这两个选项会怎样,因为它们只是位字段...NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesDeviceMetrics

所以而不是:

CGRect frame = [attributedString boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];

你有:

CGRect frame = [attributedString boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesDeviceMetrics context:nil];

?

【讨论】:

以上是关于在 boundingRectWithSize:options:context: 中使用 NSStringDrawingUsesLineFragmentOrigin: 获得额外的空白空间的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据