滚动后动态 TableView 单元格高度不正确(iOS 8) - 附上完整截图

Sim*_*ing 5 objective-c uitableview ios uistoryboard autolayout

编辑

从头开始构建一个新的示例项目,动态 tableview 单元格高度完美无缺。然后我尝试通过将我的项目缩减到最低限度来进行复制,但它仍然损坏(前几个单元格有问题)。为工作和不工作的例子附加完整的项目。项目/代码字面上看起来 99% 相同,而且我无法弄清楚 1% 的差异在哪里。唯一突然出现在我身上的是我使用了不同的尺寸类(wAny hAny vs wCompact hRegular 但我无法想象这会做任何事情,因为我只是在纵向测试

工作项目: 在此处输入图片说明

不工作的项目: 在此处输入图片说明

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
Run Code Online (Sandbox Code Playgroud)

在网上搜索试图了解发生了什么,但由于某种原因,我的单元格高度不正确,直到我滚动过原型单元格。

初始加载时: 在此处输入图片说明

滚动经过每个单元格后: 在此处输入图片说明

背景颜色: 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;
}
Run Code Online (Sandbox Code Playgroud)

Pre*_*ani 3

最后我发现了为什么它不起作用的问题。我下载了你上传的驱动项目,并对其进行了修改。并发现您使用紧凑的常规尺寸类别会导致错误的问题。将您的尺寸类别转换为Any、Any后,它工作得很好且完美。因此解决方案的关键是将wCompact hRegular更改为wAny hAny。代码没有变化。

这是最初的答案。

详细解答:

1)对于尺寸类别,请先阅读苹果的此文档。

2)在您损坏的演示中,尺寸类别的选择如下:

在此输入图像描述

这表明您选择了特定视图,例如紧凑宽度和常规高度,意味着此自动布局仅适用于特定的 iPhone 纵向。

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

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

我使用了以下尺寸类别,并且在您的工作项目中我可以看到以下尺寸类别:

在此输入图像描述

在这个 Size 类中它工作得很好。

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

如果您只想支持纵向模式并且只支持 iPhone,那么您可以在“开发信息”->“设备”中选择“iPhone”。对于方向,您可以在设备方向中选择纵向和颠倒。

希望这可以帮助您解决问题。