UITableViewController在Storyboard中具有不同的Cell大小和Cell内容

时间:2016-11-15 09:42:43

标签: ios uitableview autolayout uikit tableview

我想制作一个UITableViewController,其中包含不同的Cell大小和不同的单元格内容。

例如:

Example Storyboard

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

3 个答案:

答案 0 :(得分:2)

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

选项A(最佳)是使用Autolaizing TableView单元格和Autolayout约束。

要使用选项A,您需要确保您的手机内容视图具有清晰的顶部和对内容视图中所有UI元素的底部约束(请参阅此处的图像)作为示例:

Autosizing UITableViewCell

标题UILabel具有超视图(Cell ContentView)的顶部空间和与SubTitle的垂直间距。 SubTitle还对superview(Cell ContentView)有一个底部空间约束。

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

启用自动调整大小的最后一步是在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;
    }
}

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

https://github.com/tingxins/StackOverFlowQuestions

我相信运行demo会得到它。