我想制作一个UITableViewController
,其中包含不同的Cell大小和不同的单元格内容。
例如:
有没有办法在AutoLayout
中使用Storyboard
来定义TableViewCells
的不同大小? UIView
定义内容(TableViewCells
及其中包含内容)的最佳方法是什么?
答案 0 :(得分:2)
要更改UITableView的单元格,您有两个选项:
选项A(最佳)是使用Autolaizing TableView单元格和Autolayout约束。
要使用选项A,您需要确保您的手机内容视图具有清晰的顶部和对内容视图中所有UI元素的底部约束(请参阅此处的图像)作为示例:
标题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会得到它。