动态调整UITableViewCell的高度

时间:2015-01-27 02:42:49

标签: ios objective-c uitableview nslayoutconstraint

我有一个内置多个项目的UITableViewCell。 (不仅仅是一个textView,所以我不能按照this选项。)我试图根据内部的内容动态调整它的高度。

我将要改变的高度是UITextView和UIView。 textView将不断变化(在另一种方法,如果你愿意,我可以发布它)。如果用户点击按钮,UIView将会改变:

这是我的代码:

- (void)viewDidLoad
{
   self.tableView.rowHeight = UITableViewAutomaticDimension;
}

- (IBAction)thisButton:(id)sender
{   
    CGRect frame = self.myView.frame;
    frame.size.height = 50;
    frame.size.width = self.myView.frame.size.width;

    self.myView.frame = frame;

    // update 'myView's constraint
    self.viewHeight.constant = self.myView.frame.size.height;

    self.tableView.rowHeight = UITableViewAutomaticDimension;
    [myTableView reloadData];
}
  

问题:

     
      
  • 当我按下按钮时,会发生UIView的高度   更新,但随后单元格中的其他所有内容都会向上移动,并且单元格的大小保持不变。

  •   
  • 当UITextView的高度发生变化时,它不会拉动其他所有内容   向下,细胞高度保持不变。虽然是textView的   身高确实会发生变化,只会超越其他一切。

  •   

约束:

在UITextView上我有3个约束 - 每边2个,顶部1个。 UIView有3个约束 - 每侧2个,底部1个。 然后我有一个约束将UIView连接到textView。

1 个答案:

答案 0 :(得分:0)

您可以通过计算内部视图的最大高度来动态管理UITableViewCell大小:

NSArray * array = [[NSArray alloc] initWithArray:@ [view1,view2,view3]];

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    __block CGFloat maxHeight;
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        UIView *view = obj;
        if (view.bounds.size.height > maxHeight) {
            maxHeight = view.bounds.size.height;
        }
    }];

    return maxHeight;
}

然后在方法的最后更改视图的尺寸,您必须调用[self.tableView reloadData]