我正在扩展UIView以创建一个自定义视图,该视图将在我应用程序中的所有UIViewControllers中使用,其创建方式如下:
extension UIView {
class func customBar() -> UIView {
let barview = UIView()
barView.backgroundColor = .red
barView.translatesAutoresizingMaskIntoConstraints = false
}
}
这个方法的调用者总是一个UIViewController,我想引用调用者ViewController的视图维度来为条形添加约束,这样它总是会显示在同一个位置。所以我尝试了这个:
class func customBar() -> UIView {
let barview = UIView()
barView.backgroundColor = .red
barView.translatesAutoresizingMaskIntoConstraints = false
barView.bottomAnchor.constraint(equalTo: barView.superView!.bottomAnchor, constant: -8).isActive = true
barView.rightAnchor.constraint(equalTo: barView.superView!.rightAnchor).isActive = true
barView.leftAnchor.constraint(equalTo: barView.superView!.leftAnchor).isActive = true
barView.heightAnchor.constraint(equalToConstant: 44).isActive = true
}
但这会导致崩溃,因为当我调用此函数时,它还没有添加到viewController的视图中,因此,superView是nil
。以下是我在viewDidLoad()
let customBar = UIView.customBar()
self.view.addSubview(customBar)
如果您有任何疑问,请告诉我而不是低估。
答案 0 :(得分:0)
但这会导致崩溃,因为当我调用此函数时,它还没有添加到viewController的视图中,因此,superView是零。
由于约束添加代码必须在视图具有超级视图之前才能运行,因此请将其放在视图didMoveToSuperview
中。