如何在TableViewCell中增加和减少自定义单元格的高度

时间:2018-01-09 06:18:57

标签: ios objective-c uitableview

我是iphone开发的新手。我正在使用自定义tableview单元格。因此,我必须根据条件增加和减少自定义单元格高度。我增加了但是在增加自定义单元格的同时,主要的tableview也增加了。我只需要增加自定义单元格。下面我展示了我使用的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"test"];
    if (!cell) {
        cell= [[TableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"test"];
    }
    cell.backgroundColor = [UIColor blueColor];
    // Configure the cell...
    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
   int testvalue=1;
   if(testvalue == 1) {
      return 45;
   } else {
      return 100;
   }
}

Here I have attached screenshot.both main tableview and custom cell height is increasing. I don't want to increase main tableview cell height.

2 个答案:

答案 0 :(得分:1)

首先,我强烈建议您为tableView使用 UITableViewAutomaticDimension ,这样您就不必担心单元格大小了。

现在,根据您的要求,您希望在某些条件下更改单元格大小,因此您可以执行以下操作:

  • 在单元格中选择一个基本视图,其中包含所有其他视图 子视图。
  • 为此基本视图指定高度约束并取出该出口 身高约束。
  • 现在,当您想要增加或减少高度时,只需更改即可 高度constarint常数值就像 your_height_constraint.constant = your_new_value

希望这会对你有所帮助。

答案 1 :(得分:0)

我的工作方式是动画化最后一个视图的底部约束

func showOrHide() {
        UIView.animate(withDuration: 0.2) {
            if !self.isExpanded {
                self.heightConstraint?.constant = 0
                self.isExpanded = true

            } else {
                self.heightConstraint?.constant = 150
                self.isExpanded = false
            }
            self.contentView.layoutIfNeeded()
        }
    }

然后在tableview上调用beginUpdates和endUpdates调整单元格高度,否则下沉将不起作用

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let cell = tableView.cellForRow(at: indexPath) as! TableViewCell
        cell.showOrHide()

        tableview.beginUpdates()
        tableview.endUpdates()
    }