编辑:我更新了问题,使其更加清晰。
有没有办法检查约束并获取冲突约束的 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/