ios - 以编程方式检查和获取 NSLayoutConstraint 冲突的任何方法?

标签 ios objective-c autolayout nslayoutconstraint

编辑:我更新了问题,使其更加清晰。

有没有办法检查约束并获取冲突约束的 NSArray

我正在开发 Autolayout helper类,我想在出现冲突或错误时打印漂亮的日志。

默认情况下,当存在布局冲突时,您会收到一条显示冲突约束的日志,如下所示:

"<NSLayoutConstraint:0x7fe110638610 UILabel:0x7fe11062bb80'green'.leading == UIView:0x7fe11070de50.leadingMargin>",
"<NSLayoutConstraint:0x7fe1106386b0 H:[UILabel:0x7fe11062bb80'green'(20)]>",
"<NSLayoutConstraint:0x7fe110638660 UIView:0x7fe11070de50.trailingMargin == UILabel:0x7fe11062bb80'green'.trailing>",
"<NSLayoutConstraint:0x7fe11063fbe0 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7fe11070de50(375)]>"

我想让这些约束以更漂亮的方式显示它们(例如通过 View 键)。关于如何做到这一点有什么想法吗?

谢谢!

最佳答案

我的书提供了一些实用方法(在 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)
            }
        }
    }
}

关于ios - 以编程方式检查和获取 NSLayoutConstraint 冲突的任何方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30469592/

相关文章:

ios - '无法在 descriptionForLayoutAttribute_layoutItem_coefficient 中创建描述。有些东西是零

ios - 将声音输出到接收器而不是扬声器

iphone - Objective-C:Objective-C中的Java Math.toRadians(EndLat-StartLat)等效项是什么?

ios - 在 MKMapView 上轮选位置

objective-c - 键盘出现时 View 可以向上推吗?

ios - 防止 Interface Builder 自动创建约束?

ios - 与 watch 套件扩展和 iPhone 应用程序通信

objective-c - 在 -viewWillLayoutSubviews 中调用的方法莫名其妙地运行了两次

iphone - NSDate 内存泄漏问题

ios - 解除 View Controller 时发生奇怪的崩溃,归咎于自动布局?