ios - 如果实现了 heightForRowAtIndexPath,单元格内容不会显示

标签 ios objective-c uitableview

我使用的是 iOS 9.2 和 XCode 7.2。

我有一个基本的 UITableView 对象,我在其中添加了不同类型的 UITableViewCell 子类。

其中之一,当我手动设置覆盖方法 heightForRowAtIndexPath 的高度时,我没有在单元格上获得任何内容。

如果我返回 -1 作为高度(UITable 行高的默认值),我的单元格会正确显示。问题是我确实需要为这一行设置不同的高度,因为内容非常大。

这是 heightForRowAtIndexPath 的代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MenuItem *menuItem = [menuManager menuItemAtIndex:indexPath.row];
    if ([menuItem type] == MenuItemTypeEditorHeader) {
        return 100;
    } else {
        return [super tableView:tableView heightForRowAtIndexPath:indexPath];
    }
}

MenuItem 是一个包含特定菜单对象信息的类,例如类型。结果是单元格显示在正确的高度,但它是空的。

最佳答案

不再建议使用 heightForRowAtIndexPath - 那太老套了。相反,这样做:

  1. 在您的单元格中设置自动布局约束(如果您不知道如何操作 - 您需要,这不再是您可以避免的事情!)
  2. tableView 上创建一个 estimatedRowHeight 供自动布局使用。您可以在 nib/storyboard 中或以编程方式在 viewDidLoad 中设置它,例如,像这样:

self.tableview.estimatedRowHeight = 68.0;

  1. 将您的 tableview 设置为使用“自动尺寸”,如下所示:

    self.tableview.rowHeight = UITableViewAutomaticDimension;

就是这样。如果你做了这些事情,那么你的单元格将根据它们的约束改变高度。因此,如果您的一个子类由于其限制而具有 150px 的高度,那么它将在另一个高度为 50px 的子类旁边完美地工作。您还可以根据单元格的内容动态地改变单元格的高度,例如,当您有使用“大于或等于”约束扩展的标签时。此外 - 只需省略“heightForRowAtIndexPath”方法,您根本不需要实现它。

关于ios - 如果实现了 heightForRowAtIndexPath,单元格内容不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35290089/

相关文章:

iOS xcode,将 UILabel subview 添加到自定义表格单元格,标签文本不会在屏幕上更新

ios - UIbarButtonItem 的画外音覆盖

ios - 为 iOS 构建 AllJoyn,并启用位码

ios - 有没有办法让 TextField 输入像 ios 中的谷歌钱包输入一样?请参阅所附照片以了解我的需要

ios - 两个标签在 UICollectionViewCell 中重叠

iphone - UITableView 钩子(Hook)方法的调用顺序是什么?

ios - iPad 与 iPad Mini 用户代理

ios - NSURLResponse 和 NSHTTPURLResponse 有什么区别

ios - 来自 Apple : photos, 服务器等的权限

swift - 如何按在快速加载数据后计算的距离对表格 View 单元格进行排序