有没有办法以编程方式检查和获取NSLayoutConstraint冲突?

时间:2015-05-26 21:52:45

标签: ios objective-c autolayout nslayoutconstraint

编辑:我更新了问题,因此更清楚。

有没有办法检查约束并获得{1, 2, 3}有冲突的约束?

我正在使用Autolayout helper课程,我想在出现冲突或错误时打印漂亮的日志。

默认情况下,当存在布局冲突时,您将获得一个显示冲突约束的日志,如下所示:

NSArray

我想让这些约束以更漂亮的方式显示它们(例如通过视图键)。关于如何做的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

我的书提供了一些实用方法(在NSLayoutConstraint的类别中实现),我喜欢在调试或探索它时记录约束:

extension NSLayoutConstraint {
    class func reportAmbiguity (var v:UIView?) {
        if v == nil {
            v = UIApplication.sharedApplication().keyWindow
        }
        for vv in v!.subviews as! [UIView] {
            println("\(vv) \(vv.hasAmbiguousLayout())")
            if vv.subviews.count > 0 {
                self.reportAmbiguity(vv)
            }
        }
    }
    class func listConstraints (var v:UIView?) {
        if v == nil {
            v = UIApplication.sharedApplication().keyWindow
        }
        for vv in v!.subviews as! [UIView] {
            let arr1 = vv.constraintsAffectingLayoutForAxis(.Horizontal)
            let arr2 = vv.constraintsAffectingLayoutForAxis(.Vertical)
            NSLog("\n\n%@\nH: %@\nV:%@", vv, arr1, arr2);
            if vv.subviews.count > 0 {
                self.listConstraints(vv)
            }
        }
    }
}