更改子视图的高度约束后,uitableview单元格不会更新单元格高度

时间:2014-08-20 03:18:20

标签: ios uitableview

我有一个带有按钮和蓝色空白视图的自定义单元格,当点击按钮时,单元格应该更改蓝色视图的单元格高度约束。但是现在当蓝色视图的高度发生变化时,单元格高度不会改变,我希望单元格高度改变与蓝色视图相同的数量,但现在它并没有。 这是约束。

enter image description here

结果是

enter image description here

想要的是更新单元格高度以适应蓝色视图。 这是代码。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath {
    static NSString *CellIdentifier = @"TestZanTableViewCell";
    TestZanTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    [self configureCell:cell forIndexPath:indexPath];
    return cell;
}

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    static TestZanTableViewCell *cell;

    if (cell == nil) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"TestZanTableViewCell"];
    }

   [self configureCell:cell forIndexPath:indexPath];

   NSLog(@"%f",  [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1.0f);
   return [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height + 1.0f;

}

- (void)configureCell:(TestZanTableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath {
    if (cell.tapped) {
        cell.heightOfLikeView.constant = 50;

    }
    cell.testLabel.text = @"Helloworld";
    [cell.zanButton addTarget:self action:@selector(didTapButton:)      forControlEvents:UIControlEventTouchUpInside];
    }

 - (void)didTapButton:(id)sender {
// Cast Sender to UIButton
     UIButton *button = (UIButton *)sender;

    // Find Point in Superview
    CGPoint pointInSuperview = [button.superview convertPoint:button.center toView:self.tableView];

 // Infer Index Path
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:pointInSuperview];

    TestZanTableViewCell *cell = (TestZanTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
    cell.tapped = YES;
    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    [cell.contentView setNeedsUpdateConstraints];
    [cell.contentView layoutIfNeeded];
 }

1 个答案:

答案 0 :(得分:0)

您需要刷新表视图并明确告诉tableview,该特定单元格具有不同的高度。

您可以按如下方式刷新表格视图:

[tableview reloadData]

或者,如果您只想刷新一个细胞/特定细胞

[tableview reloadRowsAtIndexPaths:@[indexPathOfYourCell] withRowAnimation:UITableViewRowAnimationNone];

您还需要将高度函数添加到TableView的委托中,以便表格视图可以加载每个单元格的自定义高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (hasTheTallBlueView) {
        return largerValue;
    }
    return regularHeight;
}
相关问题