我有一个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版本。
答案 0 :(得分:0)
我从来没有设法找出问题是什么,以及为什么topLayoutGuide
在细胞重用后变得奇怪,但我确实设法找出如何固定到superview(容器)边界而不是布局Xcode 6中的指南,这解决了这个问题。
在Interface Builder中,我使用了Editor > Pin > Top Space to Superview
,这为我解决了这个问题。
鉴于此选项似乎不存在于菜单选项以外的任何其他位置,它似乎完全不直观,但是您的界面生成器...!