我可以从 uiview 的初始化到它的 superview 创建约束吗
Can i create constraints, from within a uiview's initialization, to its superview
我创建了很多视图,这不是问题。但是我在 VC 中有很多需要重构的更改约束代码。
问题:
我如何(如果可能)在 subView 本身的 init 方法中设置约束,以便我可以从 VC.
中重构代码
我想不出另一种方式来表达我对 google 的问题,所以这就是我得到的:
VC
func addCheckView() {
let checkView = CheckView()
checkView.frame = self.view.frame
view.insertSubview(checkView, aboveSubview: mapView)
}
import UIKit
class CheckView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
backgroundColor = .blue
// addSubview(self)
translatesAutoresizingMaskIntoConstraints = false
// let margins = layoutMarginsGuide
leadingAnchor.constraint(equalTo: leadingAnchor, constant: 40).isActive = true
trailingAnchor.constraint(equalTo: trailingAnchor, constant: -40).isActive = true
topAnchor.constraint(equalTo: topAnchor, constant: 40).isActive = true
bottomAnchor.constraint(equalTo: bottomAnchor, constant: -40).isActive = true
// layoutIfNeeded()
}
}
我尝试了很多变体,但为了保持简短和可读性(而且我认为解决方案非常简单),我将保留它。
显然,我可以简单地做这样的事情并通过触摸:
private func commonInit() {
let view = CheckView()
// add constraints here, etc.
}
这是可行的,但这不只是在子视图中添加子视图吗?这看起来既不雅又冗长。
在视图 具有 父视图之前,您不能将其约束到其父视图。但是 init
发生在有父视图之前,因此您不能将约束代码移入其中。相反,在您的 UIView 子类中,实现 didMoveToSuperview()
。现在第一次 self.superview
不是 nil
并且视图可以将自己约束到它的父视图。
我创建了很多视图,这不是问题。但是我在 VC 中有很多需要重构的更改约束代码。
问题:
我如何(如果可能)在 subView 本身的 init 方法中设置约束,以便我可以从 VC.
中重构代码我想不出另一种方式来表达我对 google 的问题,所以这就是我得到的:
VC
func addCheckView() {
let checkView = CheckView()
checkView.frame = self.view.frame
view.insertSubview(checkView, aboveSubview: mapView)
}
import UIKit
class CheckView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
backgroundColor = .blue
// addSubview(self)
translatesAutoresizingMaskIntoConstraints = false
// let margins = layoutMarginsGuide
leadingAnchor.constraint(equalTo: leadingAnchor, constant: 40).isActive = true
trailingAnchor.constraint(equalTo: trailingAnchor, constant: -40).isActive = true
topAnchor.constraint(equalTo: topAnchor, constant: 40).isActive = true
bottomAnchor.constraint(equalTo: bottomAnchor, constant: -40).isActive = true
// layoutIfNeeded()
}
}
我尝试了很多变体,但为了保持简短和可读性(而且我认为解决方案非常简单),我将保留它。
显然,我可以简单地做这样的事情并通过触摸:
private func commonInit() {
let view = CheckView()
// add constraints here, etc.
}
这是可行的,但这不只是在子视图中添加子视图吗?这看起来既不雅又冗长。
在视图 具有 父视图之前,您不能将其约束到其父视图。但是 init
发生在有父视图之前,因此您不能将约束代码移入其中。相反,在您的 UIView 子类中,实现 didMoveToSuperview()
。现在第一次 self.superview
不是 nil
并且视图可以将自己约束到它的父视图。