【问题标题】:Subclassing NSLayoutConstraint in Swift在 Swift 中继承 NSLayoutConstraint
【发布时间】:2018-07-29 16:38:34
【问题描述】:
我想在 Swift 中继承 NSLayoutConstraint 以提供更简单的方法来实例化常见约束(例如 height、width、...)。
到目前为止我写的代码草案不能正常工作,因为item-properties 无法写入:
class TestConstraint: NSLayoutConstraint {
init(item: Any) {
super.init()
self.firstItem = item // WARNING: Cannot assign to property: 'firstItem' is a get-only property
// ...
}
}
是否有可能以这种方式继承NSLayoutConstraint 还是我必须另外考虑其他事情?
【问题讨论】:
标签:
swift
inheritance
nslayoutconstraint
subclassing
【解决方案1】:
我认为你需要的是 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
}
}
}