boundingRectWithSize忽略换行符

Luk*_*ieß 6 uitableview nsstring ios

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

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

如果我例如输入

Test
\n
\n
Run Code Online (Sandbox Code Playgroud)

(换行符可视化为"\n"),该方法返回包含两行而不是三行的textview的大小.我尝试了几个options和als,attributes但找不到有效的解决方案.我怎样才能以正常的方式做到这一点?

Emm*_* Ay 1

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

该标志强制该方法使用字体的行间距来计算文本占用的范围,即从每行底部到下一行底部的距离(参考:https: //www.programmersought.com /文章/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];
Run Code Online (Sandbox Code Playgroud)