故事板中具有不同单元格大小和单元格内容的 UITableViewController

Posted

技术标签:

【中文标题】故事板中具有不同单元格大小和单元格内容的 UITableViewController【英文标题】:UITableViewController with different Cell sizes and Cell content in Storyboard 【发布时间】:2016-11-15 09:42:42 【问题描述】:

我想制作一个UITableViewController,具有不同的单元格大小和不同的单元格内容。

例如:

有没有办法在Storyboard 中使用AutoLayout 来定义TableViewCells 的不同大小?定义TableViewCells 的内容(带有内容的UIView)的最佳方式是什么?

【问题讨论】:

你可以使用不同的单元格和不同的标识符。 我知道,我这样做也是为了说明哪个单元格来自哪个自定义单元格类。但我无法更改单元格的大小。 请清楚你想要什么?如果您尝试过任何事情,请在此处添加代码。 【参考方案1】:

要更改 UITableView 的单元格,您有 2 个选项:

选项 A(最佳) 是使用 Autosizing TableView Cells with Autolayout Constraints。

要使用选项 A,您需要确保您的单元格内容视图对内容视图中的所有 UI 元素都有明确的顶部和底部约束(请参见此处的图片)作为示例:

Title UILabel 与 superview (Cell ContentView) 有一个顶部空间,与 SubTitle 有一个垂直间距。 SubTitle 对超级视图(Cell ContentView)也有底部空间限制。

这允许单元格自动调整大小,因为我的 UI 元素对内容视图具有顶部和底部约束。

启用自动调整大小的最后一步是在您的 UITableView 中设置这两个属性:

self.tableView.estimatedRowHeight = 60.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;

estimatedRowHeight 的值应该尽可能接近实际大小,这有助于加快计算速度。

选项 B 是将 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 委托添加到您的 UIViewController。

您应该在此处手动提供单元格的高度。 如果您只使用具有 2 个固定高度的 2 个不同的单元格,您也可以使用选项 B 并在那里添加一个逻辑来检测单元格并返回高度...

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    if ([cell isKindOfClass:[MyCustomCellTypeAClass class]]) 
        return 44;
    
    else 
        return 100;
    

【讨论】:

【参考方案2】:

如果您使用自动布局,高度将使用约束来计算(如果您正确设置它们);你必须使用如下委托方法 -

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    return UITableViewAutomaticDimension

【讨论】:

【参考方案3】:

使用故事板?你的意思是这样吗? enter image description here

也许我应该提供一个演示 (***Questions02) 以便清楚。更多详情--->链接:

https://github.com/tingxins/***Questions

我相信运行演示,你会得到它。

【讨论】:

以上是关于故事板中具有不同单元格大小和单元格内容的 UITableViewController的主要内容,如果未能解决你的问题,请参考以下文章

UITableView“dequeueReusableCellWithIdentifier”导致基于单元格内容的动态单元格高度的单元格重叠?

excel中的一列每个单元格内容的前面统一添加同样的文字怎么做?

故事板中的自定义单元格行高度设置没有响应

excel中的一列每个单元格内容的前面统一新增同样的文字怎么做?

在excel中如何用鼠标拖动实现单元格内容的复制与移动

故事板中tableviewController中的原型tableview单元格