UITableViewCell没有响应setNeedsLayout

时间:2015-04-10 09:19:31

标签: ios objective-c uitableview uiview

我有一个Grouped格式的UITableView,里面有几个单元格。在单元格中是UIView我要添加另一个UIView。当我更新第一个UIView的框架时,它不会更改它的位置或尺寸。

如果单元格在屏幕外再次出现在屏幕上,UIViews会自动重新对齐,因此正在应用实际转换,这只是重新渲染没有正确发生。

这个代码就在我的cellForRowAtIndexPath

[cell.cellMoney setBackgroundColor:[UIColor clearColor]];

[cell.cellMoney.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

UIView *sellMoneySubView = [UIMoneyDisplay createViewWithAmount:item.min_sale_unit_price fontSize:17.0];
[cell.cellMoney setFrame:CGRectMake(cell.frame.size.width-sellMoneySubView.frame.size.width-20, 7, sellMoneySubView.frame.size.width, sellMoneySubView.frame.size.height)];

[cell.cellMoney addSubview:sellMoneySubView];

[cell setNeedsLayout];

我添加到第一个UIView的子UIView会被添加并正确呈现,它只是第一个已经消失的定位怪异。

哦,我也在故事板上使用AutoLayout。

补充:我修复了部分问题,但标题仍然有效。我还有一个需要通过网络下载图像的单元格,但该单元格也不响应任何形式的布局调用。

我通过移除中间视图并直接添加到单元格UIView来解决问题与contentView的位置。

1 个答案:

答案 0 :(得分:1)

而不是这个   [cell setNeedsLayout] 使用[cell layoutIfNeeded]

[cell.cellMoney setBackgroundColor:[UIColor clearColor]];

[cell.cellMoney.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

UIView *sellMoneySubView = [UIMoneyDisplay createViewWithAmount:item.min_sale_unit_price fontSize:17.0];
[cell.cellMoney setFrame:CGRectMake(cell.frame.size.width-sellMoneySubView.frame.size.width-20, 7, sellMoneySubView.frame.size.width, sellMoneySubView.frame.size.height)];

[cell.cellMoney addSubview:sellMoneySubView];

[cell layoutIfNeeded]; //use this
return cell;

这可能对您有所帮助:)。