故事板中具有不同单元格大小和单元格内容的 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中的一列每个单元格内容的前面统一添加同样的文字怎么做?