如何根据特定条件返回UITableView固定行高或动态行高?

时间:2017-04-11 11:53:22

标签: ios swift swift3

我有一个tableView,在某些情况下我需要返回一个固定的行高,但动态高度需要一个标签内容的大小。 我怎样才能为同一个tableView实现这两种情况。 因为当我实施

    func tableView(_ tableView: UITableView, heightForRowAt indexPath:IndexPath) -> CGFloat {
      return 75
    }

高度始终固定。

4 个答案:

答案 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;
}