如何使用可变内容调整UITableViewCell的大小?

时间:2014-10-11 17:27:01

标签: ios objective-c uitableview

假设UITableViewCell的子类A有两种状态: 1.)显示一些标题(高度:0-50px) 2.)显示一些标题(高度:0-50px)+ UITableView(高度:50-150px)(均在子类UITableViewCell内)

A的一个细胞可以处于状态2,因此高度为200px。所有其他细胞处于状态1,因此高度为50px。

子类A使用IB实现,默认大小为200px。

管理UITableView的控制器可以保持哪个单元处于状态2。

问题:如何根据状态改变身高?

我确实按照以下方式实施heightForRowAtIndexPath

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
    if (self.openTab && indexPath.row == self.openTab.row) {
       return 200.0;
    } else {
       return 50.0;
    }
 }

它不起作用。

此外,我尝试在cellForRowAtIndexPath中调整身高:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
   static NSString *CellIdentifier = @"conversationTableViewCell";
   ConversationTableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
      [self.tableView registerNib:[UINib nibWithNibName:@"ConversationTableViewCell" bundle:nil] forCellReuseIdentifier:CellIdentifier];
      cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   }

   if (self.openTab && indexPath.row == self.openTab.row) {
      CGRect frame = cell.contentView.bounds;
      frame.size.height = 200.0;
      cell.contentView.bounds = frame;

   } else {
      CGRect frame = cell.contentView.bounds;
      frame.size.height = 50.0;
      cell.contentView.bounds = frame;
   }

   return cell;
}

除了改变contentView边界的高度之外,我还将该想法直接应用于子类A中的框架和UITableView的边界/框架。我还体验了一些其他方法(参见注释部分)。什么都行不通。

有任何想法如何完成这项工作?

2 个答案:

答案 0 :(得分:0)

如果条件合适,您的第一个代码必须有效。可能你忘记了

self.tableview.delegate = self

并且它没有通过此方法

- (void)viewDidLoad {
     [super viewDidLoad];    
    self.tableView.delegate=self;
}

和你的代码:

- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
    if (self.openTab && indexPath.row == self.openTab.row) {
       return 200.0;
    } else {
       return 50.0;
    }
}

答案 1 :(得分:-1)

通过调整UITableView来解决这个问题,UITableView已经添加到子类A的contentView中,在layoutSubviews中手动调整,如下所示:

- (void)layoutSubviews
{
  [super layoutSubviews];

  if (self.openTab) {
    CGRect frame = self.tableView.frame;
    frame.size.height = 150.0;
    self.tableView.frame = frame;
  } else {
    CGRect frame = self.tableView.frame;
    frame.size.height = 0;
    self.tableView.frame = frame;
  }
}

编辑:将视图(例如UITableView)以编程方式添加到UITableViewCell而不是使用IB以便能够更改它的大小也很重要。