在UITableView cellForRowAtIndexPath方法中访问NSLayoutConstraint?

时间:2017-06-25 21:08:25

标签: ios swift uitableview constraints

我使用了一个约束的标识符,我在使用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,但我得到了完全相同的结果。有谁知道在这两种委托方法之一中是否可以访问单元子视图的约束?最奇怪的是,调用这些方法时会加载单元格内容视图的约束,但子视图约束不是。

1 个答案:

答案 0 :(得分:0)

您至少要table(_ makeViewForRow)才能访问单元子视图。

话虽如此,您应该将此代码放在viewDidLoad()内的CellView类中。这将确保您的所有IB插座都被实例化和加载。此外,它还有助于保留CellView实例中包含的所有CellView逻辑。