UITableView 单元格在调整大小后不响应输入

Posted

技术标签:

【中文标题】UITableView 单元格在调整大小后不响应输入【英文标题】:UITableView cells do not respond to input after resizing 【发布时间】:2015-09-29 06:38:00 【问题描述】:

我在表格视图中添加新行并根据其内容调整其大小,但调整大小后,单元格内容(如按钮和didSelectRowAtIndexPath:)不会被调用。

这是调整大小的代码:

CGRect frame = cell.replayTableView.frame; 
int height = (model.replyComments.count*61)+3; 
frame.size = CGSizeMake(cell.replayTableView.frame.size.width, height); 
cell.tableviewReplay.refTable.frame=frame;

【问题讨论】:

您在使用自动布局吗?如果是,则 Frame 属性无法按预期工作。你需要更新 UItableview 的 Autolayout 约束。 【参考方案1】:

在 heightForRowAtIndexPath 上分配一个高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

  if (indexPath.Row == 1)
     return 50.0;
  else if (indexPath.Row == 2)
     return 60;   

【讨论】:

【参考方案2】:

首先,如果您使用自动布局,您还必须更新约束。 在您的代码中,您从不同的视图获取框架

CGRect frame = cell.replayTableView.frame; 

改变高度后

CGRect frame = cell.replayTableView.frame; 
int height = (model.replyComments.count*61)+3; 
frame.size = CGSizeMake(cell.replayTableView.frame.size.width, height);

但随后将其设置为不同的视图

cell.tableviewReplay.refTable.frame=frame;

这可能会给您带来问题。

【讨论】:

【参考方案3】:
 // Declare a variable in yourController.h   CGFloat tableHeight;

// set height in heightforRowAtindex
// run loop for number of rows in ur tableview data array
// put this code when ur data array is not empty  i.e after responce of webservice etc

// as your tableview is and custom cells are not created programatically , so you need viewDidLayoutSubviews to reset frames 
tableHeight = 0.0f;
        for (int i = 0; i < [dataArray count]; i ++) 
            tableHeight += [self tableView:self.multipleArticletableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
        
 [self viewDidLayoutSubviews];
// put code below in viewDidLayoutSubviews method . it will work
        self.multipleArticletableView.frame = CGRectMake(self.multipleArticletableView.frame.origin.x, self.multipleArticletableView.frame.origin.y,self.multipleArticletableView.frame.size.width, tableHeight);

【讨论】:

你的表格视图是程序化的,或者你有拖放到界面【参考方案4】:

此类问题的最常见原因是单元格具有一些 UI 组件,这些组件会拦截用户的点击,并且不会将点击传递到下方的单元格。您可以通过禁用这些组件上的用户交互来解决此问题。

例如,如果您在单元格中添加了UIView,则调用

otherView.userInteractionEnabled = NO;

【讨论】:

以上是关于UITableView 单元格在调整大小后不响应输入的主要内容,如果未能解决你的问题,请参考以下文章

图像下载后调整表格单元格大小

UITableViewAutomaticDimension 单元格在滚动或拉动刷新后调整大小

在 insertSections 不起作用后 UITableView 键盘调整大小

uitableview 自定义单元格在向下滚动 uitableview 时丢失其内容

为啥我的 UITableView 单元格在滚动时重叠?

UITableView 单元格在向下滚动然后备份后消失