我在设置自定义uiview的约束时遇到问题,该uiview是从nib加载并作为子视图添加到containerview的。我正在尝试在.keys
方法中添加约束,但是它没有按预期工作。设置自定义willMove(toSuperView)
的约束的最合适位置在哪里?
这里有代码;
UIView
extension ErrorView {
override func willMove(toSuperview newSuperview: UIView?) {
super.willMove(toSuperview: newSuperview)
guard let newSuperview = newSuperview else { return }
translatesAutoresizingMaskIntoConstraints = false
newSuperview.setConstraintHeight(to: self)
SetConstraintWidth(to: newSuperview)
}
}
和setConstraintWidth
方法名称是占位符。您可以认为它们是设置约束的方法。
答案 0 :(得分:1)
摘自Apple的文档(https://developer.apple.com/documentation/uikit/uiview/1622629-willmove):
告诉视图其超级视图即将更改为指定的超级视图。
因此,这是在之前将视图添加到新视图中。
覆盖didAddSubview()
可能是添加约束的更好位置。
答案 1 :(得分:0)
根据我所知道的覆盖layoutsubviews()的内容,将完成工作
override func layoutSubviews() {
super.layoutSubviews()
//funky stuff here
}
对于类似问题,这是一个很好的答案:Proper practice for subclassing UIView?