dynamicTableView单元格高度滚动后不正确(iOS 8) – 完整的截图

编辑

从头开始构build一个新的示例项目,dynamictableview单元格高度工作正常。 然后,我试图通过削减我的项目,以尽可能最小的复制,它仍然是破碎(前几个单元车)。 附加完整的工程,而不是工作的例子。 项目/代码字面上看起来99%相同,因为我的爱无法弄清楚1%的差异在哪里。 唯一突然出现在我身上的是我使用了不同大小的类(wAny hAny vs wCompact hRegular,但是我无法想象这会做任何事情,因为我只在肖像中testing

工作项目: 在这里输入图像说明

不工作项目: 在这里输入图像说明

WORKING (new project from scratch): https://drive.google.com/file/d/0B_EIkjmOj3ImWXZjVFZMYXZmVGc/view?usp=sharing NOT WORKING (my project, cleaned up to it's bare minimum) https://drive.google.com/file/d/0B_EIkjmOj3ImMGRNOXU2RlNkWEk/view?usp=sharing 

已经搜遍networking试图了解发生了什么,但由于某种原因,我的单元格高度是不正确的,直到我滚过原型单元格。

初始加载时: 在这里输入图像说明

滚过每个单元格后: 在这里输入图像说明

背景颜色: cell.postTextLabel.backgroundColor = [UIColor orangeColor]; subView.backgroundColor = [UIColor blueColor]; contentView.backgroundColor = [UIColor brownColor]; cell.postTextLabel.backgroundColor = [UIColor orangeColor]; subView.backgroundColor = [UIColor blueColor]; contentView.backgroundColor = [UIColor brownColor];

这里不做任何事情,只是一个原型单元格,子视图和三个标签(用户名,时间戳,文本)。

以下屏幕截图突出显示了Storyboard中的限制条件:

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

我从Parse中提取数据,并在设置tableView布局时重新加载数据

[self.tableView setNeedsLayout]; [self.tableView layoutIfNeeded]; [self.tableView reloadData];

最后我的cellForRowAtIndexPath方法:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { return [self postCellAtIndexPath:indexPath]; } - (UITableViewCell *)postCellAtIndexPath:(NSIndexPath *)indexPath { static NSString *PostCellIdentifier = @"PostCell"; PostCell *cell = (PostCell *)[self.tableView dequeueReusableCellWithIdentifier:PostCellIdentifier forIndexPath:indexPath]; [self configurePostCell:cell atIndexPath:indexPath]; [cell setNeedsLayout]; [cell layoutIfNeeded]; [cell setNeedsUpdateConstraints]; [cell updateConstraintsIfNeeded]; return cell; } 

最后我发现这个问题为什么不起作用。 我下载了你上传的项目,并在其中进行修改。 并发现你使用紧凑的常规大小类,导致错误的问题。 在将您的大小类转换为Any之后,Any就可以正常工作了。因此,解决scheme的关键是将wCompact hRegular更改为wAny hAny。 代码没有变化。

这是最初的答案。

详细的答案:

1)大小类首先阅读这个苹果的文档。

2)在你的破碎的演示中,select大小类如下所示:

在这里输入图像说明

这表示您select了像紧凑宽度和常规高度的特定视图,这意味着此自动布局只能在特定的iPhone纵向上工作。

紧凑宽度| 常规高度组合指定的布局更改仅适用于纵向方向的类似iPhone设备的尺寸。

控件wCompact hRegular指示紧凑宽度和常规高度尺寸类别。

我使用下面的大小类,也在你的工作项目中,我可以看到下面的大小类:

在这里输入图像说明

在这个大小类,它工作正常。

我不知道是苹果的bug还是什么。 !

如果您只想支持纵向模式和仅支持iPhone,则可以在开发信息 – >设备中selectiPhone。 并为了方向,你可以select纵向和上下颠倒在设备方向。

希望这可以帮助你找出问题。

我遇到了同样的问题,只是尝试使用可包含您的内容的更大的estimatedRowHeight。 当使用自定义大小的单元格时,SDK似乎做错了什么。

只需以编程方式设置行高。

 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *)indexPath { return rowHieght; } 

对于我的问题,我设置了UILabel字体

 layoutSubviews: 

这是造成这个问题。

我把代码移到其他地方后,它工作得很好

我也有同样的问题, 如何在uitableview中添加uviewviewcell

你也有自定义的单元格,所以在customcell类中使用下面的函数,你的情况是PostCell.m。

 - (void)layoutSubviews { [super layoutSubviews]; // in my case i only had set frame here while my other // declarations were in init function, so it solve my problem } 

它解决了我的同样的问题,希望它也能解决你的问题,但是你必须在自己的情况下去思考。

首先你必须设置你的细节标签行0,然后给予前导,尾随和底部约束。

viewDidLoad方法中添加:

 tableview.estimatedRowHeight = 50.0 //(your estimated row height) tableview.rowHeight = UITableViewAutomaticDimension 

然后在tableview委托get方法单元格行高中返回行高

在你的代码中

 [cell layoutIfNeeded] [cell updateContraintsIfNeeded] 

不需要,所以删除它