gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:00:05 25 4
gpt4 key购买 nike

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

有没有办法检查约束并获取冲突约束的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com