我使用了一个约束的标识符,我在使用AutoLayout创建的原型单元的子视图中添加了该约束。我尝试使用如下标识符访问约束:
let myConstraint:NSLayoutConstraint = cellSubview.constraints.filter({ (constraint:NSLayoutConstraint) -> Bool in
if constraint.identifier == "myIdentifier" {
return true
}
return false
}).first!
在运行时,应用程序崩溃,因为它意外地发现了nil。这显然是因为在展开过滤的约束数组中不存在的力展开约束。在调试控制台中,我检查了数组中有多少约束:尽管我在AutoLayout中向子视图添加了30多个约束,但它显示约束数组包含0个约束。我假设这是因为在调用cellForRow atIndexPath
方法时尚未加载单元子视图的约束。我也尝试将所有单元配置代码移动到willDisplayCell
,但我得到了完全相同的结果。有谁知道在这两种委托方法之一中是否可以访问单元子视图的约束?最奇怪的是,调用这些方法时会加载单元格内容视图的约束,但子视图约束不是。
答案 0 :(得分:0)
您至少要table(_ makeViewForRow)
才能访问单元子视图。
话虽如此,您应该将此代码放在viewDidLoad()内的CellView类中。这将确保您的所有IB插座都被实例化和加载。此外,它还有助于保留CellView实例中包含的所有CellView逻辑。