点击时UITableViewCell高度问题

Posted

技术标签:

【中文标题】点击时UITableViewCell高度问题【英文标题】:UITableViewCell height issue when tap 【发布时间】:2018-06-12 11:27:35 【问题描述】:

我在 xib 中使用了自定义 UITableViewCell。在 UITableViewCell 我使用了集合视图。一切正常,但是当我展开和折叠单元格时出现问题。我想要做的是当我点击单元格时,如果它没有折叠,它就会展开。我为此更改了约束,但它不起作用,当我点击按钮两次时它正在起作用。我的代码是:

#pragma mark:tbl view delegate data source
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    NSLog(@"%lu",(unsigned long)postArr.count);
    return postArr.count;


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    rewardCell*cell = [tableView dequeueReusableCellWithIdentifier:@"simpleCellReward"];

     if (cell == nil) 
         cell = [[rewardCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"simpleCellReward"];
     

     [cell.showRewardBtn addTarget:self action:@selector(showRewards:) forControlEvents:UIControlEventTouchUpInside];

     cell.showRewardBtn.tag = indexPath.row+1;

     cell.collectionContainer.layer.cornerRadius = 3.0;
     cell.collectionContainer.clipsToBounds = true;

     cell.lblTitle.text = [NSString stringWithFormat:@"My Reward %ld",(long)indexPath.row];

     if (selectIndexForReward == indexPath.row) 
         if (cell.collectionHeightConstraint.constant == 0) 
             cell.collectionHeightConstraint.constant = 97;

         else
             cell.collectionHeightConstraint.constant = 0;
         
     

     [cell layoutIfNeeded];
     [cell.collectionView layoutIfNeeded];
     return cell;




-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    if ((int)indexPath.row == (slot-2)) 
        page = page+1;
        slot = slot+10;

       HUD = [MBProgressHUD showHUDAddedTo:self.view animated:true];

        [apiObj getPostData:@@"page":[NSString stringWithFormat:@"%d",page],@"user_id":user.usrid];
    


-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
    return UITableViewAutomaticDimension;

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    return UITableViewAutomaticDimension;

注意:有多个自定义单元格由条件管理,但我需要可扩展单元格,特别是上面用代码编写的自定义单元格。

当我点击两次时,上面的代码有效。在单元格中有一个按钮,我在其上设置目标并使用该目标重新加载表。代码是

#pragma mark:ShowReward
-(void)showRewards:(UIButton*)sender
    selectIndexForReward= (int)sender.tag-1;
    //[self.tblView reloadData];
    rewardCell *cell =(rewardCell *)sender.superview.superview.superview; //change with your class
    NSIndexPath *indexPath = [self.tblView indexPathForCell:cell];
    [self.tblView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];

 

【问题讨论】:

【参考方案1】:

更改showReward方法中的约束值并调用tableview的beginUpdate()endUpdate()方法。

-(void)showRewards:(UIButton*)sender

rewardCell *cell =(rewardCell *)sender.superview.superview.superview; //change with your class

tableView.beginUpdates()
         if (cell.collectionHeightConstraint.constant == 0) 
             cell.collectionHeightConstraint.constant = 97;

         else
             cell.collectionHeightConstraint.constant = 0;
         
     
tableView.endUpdates()

【讨论】:

以上是关于点击时UITableViewCell高度问题的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 扩展自动布局

使用自定义 UITableViewCell 时,imageview 框架为零

当单元格滚动回视图时表格崩溃

保存 UITableviewcell accessoryView 的状态

无法调整包含 UIView 的 UITableViewCell

dequeueReusableCellWithIdentifier、自定义 UITableViewCell 的问题