我有一个tableView,在某些情况下我需要返回一个固定的行高,但动态高度需要一个标签内容的大小。 我怎样才能为同一个tableView实现这两种情况。 因为当我实施
func tableView(_ tableView: UITableView, heightForRowAt indexPath:IndexPath) -> CGFloat {
return 75
}
高度始终固定。
答案 0 :(得分:6)
首先要做到这一点,你需要将标签的行数设置为零。 然后从forView为tableView单元格赋予标签约束。 (我假设你已经做了,这不是主要问题)。
然后在你的viewDidLoad中添加:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300
并实现heightForRow函数,如下所示:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if condition == true {
return 200
//This will return fixed height
}
return UITableViewAutomaticDimension
}
答案 1 :(得分:0)
像这样使用你的委托身高法
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row = 1 || indexPath.row = 4 || indexPath.row = 6{// your required cells index
return 75
}
else{
return UITableViewAutomaticDimension
}
}
答案 2 :(得分:0)
将标签的行数设置为0.
同时实现heightForRow和estimatedHeightForRowAt:
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if yourRequiredCondition {
return requiredHeight
}
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if yourRequiredCondition {
return requiredHeight
}
return UITableViewAutomaticDimension
}
答案 3 :(得分:0)
当你走上正轨时。覆盖UITableView的数据源方法的 heightForRowAtIndexPath ,如下所示。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *labelString = @"Your cell text, probably you should have an array accessed through indexPath";
CGSize defaultSize = CGSizeMake(yourLabel.width, CGFLOAT_MAX);
//Get the height of the label, based on the text.
CGFloat textHeight =
[labelString boundingRectWithSize:defaultSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[yourfont]}
context:nil].size.height;
// Now the textHeight will have the height of your label,
// based on your text for each cell.
// While returning you can return the textHeight + constant height.
// Constant height, is nothing but other static elements of cell's
// Aggregated height & spaces.
return textHeight+CONSTANT_HEIGHT;
}