为什么自动布局约束未根据SuperView在willMove(toSuperView)方法中正确设置

时间:2018-10-23 12:28:56

标签: ios swift uikit

我在设置自定义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方法名称是占位符。您可以认为它们是设置约束的方法。

2 个答案:

答案 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?