编辑

从头开始构建一个新的示例项目,并且动态tableview单元格的高度正常运行。然后,我尝试通过将项目缩减到最低限度并且仍然损坏(前几个单元有问题)来进行复制。附上完整的项目,无论是工作实例还是不工作实例。项目/代码从字面上看看起来是99%相同,对我的爱我无法弄清楚1%的差异在哪里。出现在我身上的唯一一件事是,我使用了不同的大小类(wHny 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

在网上搜寻了一下,试图了解正在发生的事情,但是由于某些原因,我的单元格高度不正确,直到我滚动通过原型(prototype)单元格为止。

初始加载时:

并滚动到每个单元格之后:

背景颜色: cell.postTextLabel.backgroundColor = [UIColor orangeColor]; subView.backgroundColor = [UIColor blueColor]; contentView.backgroundColor = [UIColor brownColor];
这里不要做任何花哨的事情:只是一个原型(prototype)单元,一个 subview 和三个标签(用户名,时间戳,文本)。

以下屏幕截图突出显示了我在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之后,任何都可以正常工作。因此,解决方案的关键是将 wCompact hRegular 更改为 wHny hAny。 代码没有变化。

那是最初的答案。

详细答案:

1)对于大小类,首先阅读apple的this文件。

2)在 splinter 的演示中,尺寸等级的选择如下:

ios - 直到滚动后,动态TableView单元格的高度才正确(iOS 8)-完整的屏幕快照已附加-LMLPHP

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



我使用了以下尺寸等级,在您的工作项目中,我还可以看到以下尺寸等级:

ios - 直到滚动后,动态TableView单元格的高度才正确(iOS 8)-完整的屏幕快照已附加-LMLPHP

在这个Size类中,它工作正常。

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

如果只想支持肖像模式,而只支持iPhone,则可以在“开发信息”->“设备”中选择“iPhone”。对于方向,您可以选择纵向,然后在设备方向中上下颠倒。

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

关于ios - 直到滚动后,动态TableView单元格的高度才正确(iOS 8)-完整的屏幕快照已附加,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30114994/

10-10 20:45
查看更多