在Swift中创建带背景的UIView

时间:2017-06-29 15:38:10

标签: swift 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 到目前为止,所有其他方法都很好。

1 个答案:

答案 0 :(得分: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的任何层)。