iOS 8自动高度单元在第一次加载时不正确的高度

我有一个iOS 8应用程序,我有一个search结果页面,每个单元格基于某个标签的高度进行自动化。 但是,视图第一次加载后显示的单元格不会自动大小。 向下滚动后,单元格的大小正确。 我正在接线故事板中的自动布局约束。 我在viewDidLoad中有以下代码。

- (void)viewDidLoad { [super viewDidLoad]; //configure tableView so that we use autolayout enabled row heights self.tableView.estimatedRowHeight = 68; self.tableView.rowHeight = UITableViewAutomaticDimension; } 

有没有人经历过这个?

是的,在故事板中制作视图和约束时(但不添加代码添加视图),我看到了同样的问题。 如果通过在自定义单元类中添加此代码来解决此问题,

 -(void)didMoveToSuperview { [self layoutIfNeeded]; } 

这可能可能在其他地方,但这种方法似乎只被称为一次,所以我认为这是一个很好的地方做到这一点。

rdelmar的回答对我不起作用。

我所做的是添加这个代码:

 [tableView setNeedsLayout]; [tableView layoutIfNeeded]; [tableView reloadData]; 

在获取数据之后,首先调用[tableView reloadData] ,这在我的情况下位于View Controller的viewDidLoad方法中。

所以结果代码是:

 NSArray *fetchedData = ... [tableView reloadData]; //Fist table reload [tableView setNeedsLayout]; [tableView layoutIfNeeded]; [tableView reloadData]; //Second table reload 

这个答案取自这里: http : //useyourloaf.com/blog/self-sizing-table-view-cells.html#comment-1783719287

我认为,而不是在viewDidLoad中强制tableView.reloadData()tableView.layoutIfNeeded() ,你可以在viewWillLayoutSubviews()设置你的tableView的自动高度:

迅速:

 override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() tableView.estimatedRowHeight = 300 tableView.rowHeight = UITableViewAutomaticDimension } 

我有同样的问题,并通过将单元格的UILabels的文本属性(是唯一可能影响我的特定单元格中的高度计算的组件)的分配移动到以下位置来解决此问题:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

代替:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

在做这个之前,我注意到如果一个单元格在屏幕上瞬间滚动然后回到视图中,单元格高度将被正确计算。 很有可能是因为在那个时候,细胞有关于确定最终高度的UILabel含量的必要信息。

我能够通过不使用笔尖/故事板来绕过这个,而是以编程方式完成布局。