【问题标题】:boundingRectWithSize ignores line breaksboundingRectWithSize 忽略换行符
【发布时间】:2014-07-22 15:33:38
【问题描述】:

我正在尝试创建一个包含UITextViewUITableViewCell,并且当用户在文本视图中输入文本时,单元格应相应增长。 到目前为止,这也很有效,除了boundingRectWithSize 方法在计算新单元格大小时忽略尾随换行符。这是我的方法调用的样子:

  CGRect rect = [text boundingRectWithSize:CGSizeMake(self.cellSize.width, CGFLOAT_MAX)
                                   options:NSStringDrawingUsesLineFragmentOrigin
                                attributes:@{NSFontAttributeName:[UIFont fontWithName:@"AvenirNext-Medium" size:14.0]}
                                   context:nil];

如果我例如输入

Test
\n
\n

(换行符显示为“\n”),该方法返回包含两行而不是三行的文本视图的大小。 我尝试了几个options 和其他attributes,但找不到有效的解决方案。我怎样才能以正常的方式做到这一点?

【问题讨论】:

  • 您最好尝试使用自动布局来自动调整单元格的大小。见this post
  • 哦,哇,这看起来很有趣。不敢相信我以前从未见过它。谢谢!
  • 如果您想使用 textview 显示您的文本,自动布局不会像那篇文章那样轻松地帮助您。我已经在我的应用程序中广泛地完成了这项工作,基本上你仍然需要计算文本的大小并通过属性相关的布局高度约束来增加文本视图。至于你的代码,你为什么不先检查一下文本是否以 \n 结尾,如果是,添加一个字符,如 A 并根据它计算大小?
  • 你是如何解决这个问题的?

标签: ios uitableview nsstring


【解决方案1】:

这个问题是谷歌搜索特定错误/功能时的第一个搜索结果。它是可解决的,解决方法是在“options”参数中提供一个额外的标志:NSStringDrawingUsesFontLeading

该标志强制该方法使用字体的行距来计算文本占用范围,即每行底部到下一行底部的距离(参考:https://www.programmersought.com/article/6564672405/)。

我还发现,根据使用的字体,您可能需要在生成的矩形的 height 属性中添加一些额外的填充。

CGRect rect = [text boundingRectWithSize:CGSizeMake(self.cellSize.width, CGFLOAT_MAX)
                                   options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                attributes:@{NSFontAttributeName:[UIFont fontWithName:@"AvenirNext-Medium" size:14.0]}
                                   context:nil];

【讨论】:

    猜你喜欢
    • 2021-06-17
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多