swift - 在 Swift 中继承 NSLayoutConstraint
问题描述
我想NSLayoutConstraint
在 Swift 中进行子类化,以提供更简单的方法来实例化常见的约束(例如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
这种方式进行子类化,还是我必须另外考虑其他事情?
解决方案
我认为您需要的是 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
}
}
}
推荐阅读
- python - 提高 For 循环 Python 的速度
- c - Termcap tgetstr 获取箭头键
- java - 如何使用 Rest Assured 解析空白响应标头
- c++ - Qt用CMake调用c++函数
- ios - 我可以从我的 iOS 应用程序中打开 Numbers 电子表格应用程序吗?
- python - 从 Google Storage Cloud 读取数据到 Google Cloud Datalab 奇怪的错误
- python - 为什么python打印正确的值但返回None?
- java - 插页式广告不会在真实设备上展示
- assembly - 组装奇怪的输入?
- java - 无法在 Eclipse 中获取 fxml 资源?