为什么我在xcode 6 beta中得到“必须将自动调整掩码转换为约束以使_setHostsLayoutEngine:YES”

时间:2014-06-14 06:19:37

标签: swift xcode6

我在swift UITableViewController中有以下代码,但我得到一个"必须将自动调整掩码转换为约束,以便在第二行有_setHostsLayoutEngine:YES异常。我没有更改界面构建器中的任何设置(因此检查了Autolayout和大小类)。

override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell? {
    let cell:TodoItemCell = tableView.dequeueReusableCellWithIdentifier("TodoItemCell", forIndexPath: indexPath) as TodoItemCell
    let row = indexPath.row
    cell.titleLabel.text  = self.todoItems![row].title
    self.callback!(row)
    // Configure the cell...

    return cell
}

我做错了什么?

9 个答案:

答案 0 :(得分:54)

不确定这有多大帮助,但如果我尝试将单元格直接放在UIView而不是表格中,我会看到同样的错误。这对Xcode 5很好用,所以我怀疑它是XCode6 / ios8的一个bug。同时,调试到该方法并查看你的tableView。确保它实际上有一个您要检索的单元格的实例。

更新:向Apple提交了一份错误报告,我可以确认这是一个ios8问题。不幸的是,它仍然存在于beta-5中,希望它们能在最终发布之前修复它。

答案 1 :(得分:31)

这是 NOT 一个错误,您根本无法使用UIView作为表格视图的单元格,您必须确保nib文件中的顶级视图是{{1} }。

答案 2 :(得分:13)

就我而言,我正在加载一个包含在UIView中的UITableViewCell的nib文件。在nib文件中禁用自动布局后,我再也没有得到异常。

答案 3 :(得分:8)

我也遇到了这个问题,这是由于UITableViewCell子类在UITableView之外的视图层次结构中使用,如其他答案中所述。在这种情况下,我的时间有限,所以我无法将该子类中的功能移动到UIView子类中。我想到的解决方法是在我的视图层次结构中创建一个UIView实例,该实例应该是单元格,并将单元格实例的视图层次结构移植到其中,并从显示的视图层次结构中删除单元格本身。只要我保留了视图,我就连接到了单元格实例的各种属性,一切都保持正常。

它有点hacky,但它会保持运行直到重构的时间可用。

答案 4 :(得分:4)

人们,这不是一个BUG。从未在下面说过:

“这不是bug,你根本无法使用UIView作为表视图的单元格,你必须确保nib文件中的顶级视图是UITableViewCell。”

我测试了它并且它有效。

您需要创建Xib文件并删除它具有的顶级视图。之后,将UITableViewCell拖放到笔尖中。这样,这个问题就不会发生了。

Note that the top level object in the Xib is a UITableViewCell not a UIView

答案 5 :(得分:3)

从.xib的属性中取消选择“使用自动布局”选项解决了我的问题。 - 发布我所做的事情可能有助于其他人。

谢谢。

答案 6 :(得分:3)

在我的情况下,我在UIView中使用UITableViewCell来创建自定义单元格 enter image description here

然后我从UIView中删除了单元格,然后直接在UIView中添加了所有内容,这解决了我的问题。enter image description here

希望它也能帮到你。 一切顺利

答案 7 :(得分:2)

在我的情况下,我复制并粘贴了单元格,但缺少导致此错误的约束。 如果要将单元格复制到另一个xib文件中,请确保复制约束或再次创建约束

答案 8 :(得分:0)

在我的例子中,UITableViewCell父级是主视图而不是UITableView。在这种情况下,您只需将单元格放在tableview中。

我认为如果您将单元格拖到视图中而不考虑正确的层次结构,这可能是一个常见问题。