在Swift中子类化NSLayoutConstraint

在Swift中子类化NSLayoutConstraint,swift,inheritance,nslayoutconstraint,subclassing,Swift,Inheritance,Nslayoutconstraint,Subclassing,我想在Swift中对NSLayoutConstraint进行子类化,以便为实例化常见约束提供更简单的方法(例如height,width,…) 到目前为止,我编写的代码草稿无法正常工作,因为编写时无法访问项-属性: class TestConstraint: NSLayoutConstraint { init(item: Any) { super.init() self.firstItem = item // WARNING: Cannot assign t

我想在Swift中对
NSLayoutConstraint
进行子类化,以便为实例化常见约束提供更简单的方法(例如
height
width
,…)

到目前为止,我编写的代码草稿无法正常工作,因为编写时无法访问
-属性:

class TestConstraint: NSLayoutConstraint {
    init(item: Any) {
        super.init()
        self.firstItem = item // WARNING: Cannot assign to property: 'firstItem' is a get-only property

        // ...
    }
}

是否可以用这种方式将
NSLayoutConstraint
子类化,或者我需要额外考虑其他事项?

我认为您需要的是UIView的扩展

extension UIView{
    func anchor(top:NSLayoutYAxisAnchor?,leading:NSLayoutXAxisAnchor?,trailing:NSLayoutXAxisAnchor?,bottom:NSLayoutYAxisAnchor?,padding:UIEdgeInsets = .zero,size:CGSize = .zero){

        translatesAutoresizingMaskIntoConstraints = false

        if let top = top{
            topAnchor.constraint(equalTo: top, constant: padding.top).isActive = true
        }
        if let leading = leading{
            leadingAnchor.constraint(equalTo: leading, constant: padding.left).isActive = true
        }
        if let trailing = trailing{
            trailingAnchor.constraint(equalTo: trailing, constant: -padding.right).isActive = true
        }
        if let bottom = bottom{
            bottomAnchor.constraint(equalTo: bottom, constant: -padding.bottom).isActive = true
        }
        if size.width != 0{
            widthAnchor.constraint(equalToConstant: size.width).isActive = true
        }
        if size.height != 0{
            heightAnchor.constraint(equalToConstant: size.height).isActive = true
        }
    }

}

你试过布局锚吗?。这是首选的方式。不要将其子类化这更简单,谢谢。如果您真的想自定义约束,