代码之家  ›  专栏  ›  技术社区  ›  L'lynn

为什么在willMove(to superview)方法中没有根据superview正确设置autolayout约束

  •  -1
  • L'lynn  · 技术社区  · 6 年前

    我在设置从nib加载并作为子视图添加到containerview的自定义uiview的约束时遇到问题。我试图在 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 setConstraintHeight 方法名是占位符。你可以认为它们是设置约束的方法。

    2 回复  |  直到 6 年前
        1
  •  1
  •   DonMag    6 年前

    来自苹果的文档( https://developer.apple.com/documentation/uikit/uiview/1622629-willmove

    告诉视图其超级视图即将更改为指定的超级视图。

    所以,这就发生了 视图将添加到新视图中。

    超越 didAddSubview() 可能是添加约束的更好地方。

        2
  •  0
  •   Laureano De Andrea    6 年前

    根据我的知识,重写layoutsubviews()将完成以下工作

    override func layoutSubviews() {
        super.layoutSubviews()
        //funky stuff here
    }
    

    对于类似的问题,这里有一个很好的答案: Proper practice for subclassing UIView?