【问题标题】:Using NSStringDrawingUsesLineFragmentOrigin in boundingRectWithSize:options:context: gets extra blank space在 boundingRectWithSize:options:context: 中使用 NSStringDrawingUsesLineFragmentOrigin: 获得额外的空白空间
【发布时间】: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;
};

【问题讨论】:

  • 我也有同样的问题。你发现问题了吗?
  • 你有什么运气吗?我也有同样的问题。

标签: ios uitableview uikit


【解决方案1】:

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

所以而不是:

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

你有:

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

?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    相关资源
    最近更新 更多