UITableViewCell的框架仅在滚动

时间:2015-07-20 16:00:31

标签: ios objective-c uitableview cocoa-touch uikit

我根据代码改变单元格框架(向左和向右添加边距)。问题是细胞只有在它们消失后才更新它们的帧并通过滚动再次出现。我也使用了表视图 - reloadData,但它没有用。如何在不滚动的情况下强制重绘单元格?

- (UITableViewCell *) tableView: (UITableView *) tableView
      cellForRowAtIndexPath: (NSIndexPath *) indexPath {
PersonTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: @"TableViewCellID"
                                                            forIndexPath: indexPath];

cell.frame = CGRectMake(20, cell.frame.origin.y, cell.frame.size.width-2*20, cell.frame.size.height);

/* tried any of those
[cell setNeedsDisplay];
[cell setNeedsLayout];
[cell layoutIfNeeded];
*/
return cell;

}

2 个答案:

答案 0 :(得分:1)

我建议使用.xibs。更容易。

据我所知,您无法以这种方式更改单元格的框架。单元格的高度由heightForRowAtIndexPath确定,宽度设置为tableView的宽度。

你可能会以某种方式按照你的方式去做,但我知道的最简洁的方法如下。

如果您希望在单元格周围有边距,您可以:

  • 为包含所有视图的UITableViewCell的{​​{1}}创建一个笔尖,并使用约束放置边框。
  • 将您的所有内容嵌入UIView(我们称之为UIView)并将其作为borderedContentView的直接子视图
  • contentViewborderedContentView的约束放在一起,前导,尾随,顶部和底部约束设置为创建所需边框宽度的值。
  • 如果您的tableView有contentView,则必须将backgroundColor的{​​{1}}设置为与contentView backgroundColor相同的颜色为了创造一个边际的错觉。在tableView的委托方法backgroundColortableView willDisplayCell:的子类或其他相关方法中执行此操作。
  • 获得保证金细胞的荣耀。

如果您不想使用界面构建器,也可以以编程方式执行此操作,但在IB中这很容易。

希望这有帮助。

答案 1 :(得分:1)

问题的解决方案是覆盖 setFrame UITableViewCell的方法。这样就完美了。