2017-06-29 62 views
1
背景一个UIView

我纯粹代码创建一个控制器上的UIView(我不是在所有用故事板创建斯威夫特

这里为简单的视图代码:

let greenView: UIView = { 
    let v = UIView(frame: CGRect.zero) 
    v.translatesAutoresizingMaskIntoConstraints = false 
    v.backgroundColor = UIColor.rgb(red: 183, green: 202, blue: 45) 
    v.layer.borderWidth = 1 
    return v 
}() 

当我设置在屏幕的观点,我有:

view.addSubview(greenView) 
    greenView.anchor(top: joined.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 20, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: view.frame.width - 20, height: 200) 

这个“锚”的功能仅仅是一个扩展,以帮助建立汽车布局约束和它运作良好,包括像所有其他组件实际上从UIView继承的UIButton。

问题:视图不显示在屏幕上的任何位置......我错过了什么吗?我正在使用LBTAComponents

更具体地说this class 到目前为止工作良好与所有其他方法。

+0

该行为表明约束不起作用。为什么不显示你正在使用的扩展名?更好的是,不要使用扩展名 - 只需将“long”代码添加到此视图中,并查看它是否有效。如果是这样,那么就“向后”工作到扩展。 – dfd

+0

您是否在[查看调试器]中查找了视图(https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/special_debugging_workflows.html#//apple_ref/doc/uid/ TP40015022-CH9-SW2)?确保在调试器中关闭剪辑,以便即使裁剪也可以看到该视图。 –

+0

@robmayoff它显示在堆栈上,但它表示高度不明确。 –

回答

0

你说你正在使用LBTAComponents,但你的方法签名不匹配。它们很接近,但看起来他们使用的是旧版本(查看历史记录,我没有看到与上面使用的方法签名匹配的旧版本),或者您有自己的扩展包装此API 。例如,下面的代码:

greenView.anchor(top: joined.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 20, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: view.frame.width - 20, height: 200) 

应该是:

greenView.anchor(joined.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, topConstant: 20, leftConstant: 20, bottomConstant: 0, rightConstant: 0, widthConstant: view.bounds.width - 20, heightConstant: 200) 

当我纠正方法签名,并与LBTAComponents的最新版本中使用它,代码工作正常。所以这个问题必须在这些扩展的版本中(或者你用来包装这个库以产生上面的API的任何层)。

+0

感谢这是真的,我从这个LBTAComponents的作者在YouTube上跟着一些教程,我有一个旧的扩展与该锚方法...愚蠢的我..非常感谢@Rob。 –