重复使用UITableViewCell后,topLayoutGuide会搞砸

时间:2014-12-05 14:26:54

标签: ios uitableview swift ios8 autolayout

我有一个UITableViewCell子类,我在其中实例化UIViewController子类并将其view添加到UITableViewCell的{​​{1}}:

contentView

viewController.view.frame = CGRectMake(0, 0, contentView.frame.size.width, contentView.frame.size.height) contentView.addSubview(viewController.view) 内部(在故事板中创建),我有一个viewController固定在视图的顶部(好吧,它是UIImageView,因为Xcode 6接口Builder似乎只允许我固定到topLayoutGuide,而不再是容器顶边...)

我还应该提到单元格高度为230,与Storyboard中的topLayoutGuide大小相同,因此viewController.view应该占用单元格的整个大小。

这一切在第一次显示单元格时工作正常,但在重用后,viewController中的topLayoutGuide似乎随机混乱,导致viewController不再固定到在单元格的顶部,而是向下移动:

在第一个显示屏上,UIImageView为0,这是正确的。然而,在向上滚动之后我可以在单元格topLayoutGuide.length中看到prepareForReuse()更改为179.333333333333或163.666666666667,这会导致整个单元格布局变得混乱。

我无法弄清楚为什么viewController.topLayoutGuide.length在细胞重用后会像这样改变自己。

我认为一种解决方法只是将受影响的topLayoutGuide固定到顶部容器边缘而不是UIImageView,这将避开此问题 - 但似乎Xcode 6不再提供此功能(至少,不是没有在代码中手动创建约束......)

此行为在iOS 8中展示,我没有测试过其他iOS版本。

1 个答案:

答案 0 :(得分:0)

我从来没有设法找出问题是什么,以及为什么topLayoutGuide在细胞重用后变得奇怪,但我确实设法找出如何固定到superview(容器)边界而不是布局Xcode 6中的指南,这解决了这个问题。

在Interface Builder中,我使用了Editor > Pin > Top Space to Superview,这为我解决了这个问题。

鉴于此选项似乎不存在于菜单选项以外的任何其他位置,它似乎完全不直观,但是您的界面生成器...!