我在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
}
我做错了什么?
答案 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,你根本无法使用UIView作为表视图的单元格,你必须确保nib文件中的顶级视图是UITableViewCell。”
我测试了它并且它有效。
您需要创建Xib文件并删除它具有的顶级视图。之后,将UITableViewCell拖放到笔尖中。这样,这个问题就不会发生了。
答案 5 :(得分:3)
从.xib的属性中取消选择“使用自动布局”选项解决了我的问题。 - 发布我所做的事情可能有助于其他人。
谢谢。
答案 6 :(得分:3)
在我的情况下,我在UIView中使用UITableViewCell来创建自定义单元格
然后我从UIView中删除了单元格,然后直接在UIView中添加了所有内容,这解决了我的问题。
希望它也能帮到你。 一切顺利
答案 7 :(得分:2)
在我的情况下,我复制并粘贴了单元格,但缺少导致此错误的约束。 如果要将单元格复制到另一个xib文件中,请确保复制约束或再次创建约束
答案 8 :(得分:0)
在我的例子中,UITableViewCell父级是主视图而不是UITableView。在这种情况下,您只需将单元格放在tableview中。
我认为如果您将单元格拖到视图中而不考虑正确的层次结构,这可能是一个常见问题。