如何根据文本标签长度动态设置表格单元格高度?

Pre*_*fix 14 objective-c uitableview ios

我正在尝试学习Obj-C和iOS编程,但我仍然很新.我决定尝试制作一个简单的Reddit客户端应用程序.我试图在a中显示首页帖子UITableView,每个帖子由自己的单元格表示.

在单元格上,这是我设置标题的方式:

cell.textLabel.numberOfLines = 0;
cell.textLabel.text = [[tempDictionary objectForKey:@"data"] objectForKey:@"title"];   
[cell.textLabel sizeToFit];
Run Code Online (Sandbox Code Playgroud)

但是,如果标题文本太长,则单元格最终会剪切自身.这是一张图片:

在此输入图像描述

如何让我的单元格自动调整其高度以适应更长的标题标签,而不会与其他单元格或详细文本标签相交?

感谢您的任何帮助!

Dim*_*lov 19

对于新的iOS 8,有一种新方法可以实现这一点.

有一个新参数可根据您的自动布局约束计算单元格高度.这是UITableViewAutomaticDimension.您可以在viewWillAppear视图控制器的方法中使用它.

目标C:

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
  self.tableView.estimatedRowHeight = 70.0; // for example. Set your average height 
  self.tableView.rowHeight = UITableViewAutomaticDimension;
  [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

迅速:

override func viewWillAppear(animated: Bool) {
    self.tableView.estimatedRowHeight = 70 // for example. Set your average height 
    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.reloadData()

} 
Run Code Online (Sandbox Code Playgroud)

工作很好,你想要的例子.至于我,我只viewDidLoadviewWillAppearreloadData()中添加高度内容.还有一些有用的来源.

从文档:The default value of rowHeight is UITableViewAutomaticDimension.我现在保留代码,但请记住,您不需要在iOS 8+中设置行高.

您需要做的主要事情是明确地设置所有约束,例如前导,尾随,顶部和底部.首先尝试,不添加任何上面的代码行.


PHD*_*PHD 11

你应该看看文档参考

-[UITableViewDelegate tableView:heightForRowAtIndexPath:]
Run Code Online (Sandbox Code Playgroud)

基本上,您需要自己测量文本,以便为每个表行返回正确的尺寸.如果它们很简单NSStrings,它们似乎来自您的屏幕截图,您可以使用NSString UIKit Additions来测量它们,例如

-[NSString sizeWithFont:constrainedToSize:]
Run Code Online (Sandbox Code Playgroud)

约束大小可以具有无限高度但是表格单元格内容视图的宽度.

如果它们是属性字符串,则在NSAttributedString UIKit添加中调用类似的方法 boundingRectWithSize:options:context: