【发布时间】:2014-12-05 14:26:54
【问题描述】:
我有一个UITableViewCell 子类,我在其中实例化了一个UIViewController 子类并将它的view 添加到UITableViewCell 的contentView:
viewController.view.frame = CGRectMake(0, 0, contentView.frame.size.width, contentView.frame.size.height)
contentView.addSubview(viewController.view)
在viewController(它是在故事板中创建的)内部,我有一个固定在视图顶部的UIImageView(嗯,它是topLayoutGuide,因为Xcode 6 Interface Builder 似乎只允许我使用固定到topLayoutGuide,而不是容器顶部边缘...)
我还要提一下,单元格高度为 230,与 Storyboard 中的 viewController.view 大小相同,因此 viewController 应该占据整个单元格的大小。
这在第一次显示单元格时一切正常,但在重用 viewController 中的 topLayoutGuide 后似乎随机混乱,导致 UIImageView 不再固定在单元格顶部,并且而是向下移动:
在第一次显示时,topLayoutGuide.length 为 0,这是正确的。但是,在上下滚动一下之后,我可以在单元格的 prepareForReuse() 中看到 viewController.topLayoutGuide.length 更改为 179.333333333333 或 163.666666666667,这会导致整个单元格布局混乱。
我不明白为什么topLayoutGuide 在单元重用后会这样改变自己。
我想一种解决方法是将受影响的UIImageView 固定到顶部容器边缘而不是topLayoutGuide,这将回避这个问题——但似乎 Xcode 6 不再提供此功能(至少,不是无需在代码中手动创建约束...)
此行为在 iOS 8 中出现,我没有测试过其他 iOS 版本。
【问题讨论】:
标签: ios uitableview swift ios8 autolayout