我知道如何设置约束,但我确实需要知道如何正确设置它。
基本上,我有一个 UIView 子类的自定义 View ,我需要指定约束,例如标签需要始终位于按钮上方 10 点。
这样的约束,该在哪里设置呢?现在我正在 init
函数中设置约束,在指定约束后我调用 layoutIfNeeded
。但我也读过,您应该在 layoutSubviews
中设置约束,但我又在某处读到,layoutSubviews 将被多次调用,因此在那里设置约束实际上没有意义。
我还玩了一下layoutsubviews,我意识到我在layoutsubviews中设置的约束实际上对布局没有任何影响。到目前为止,我只是通过直接调用layoutIfNeeded 成功设置了约束。
我也很好奇,我只需要设置一次约束还是每次刷新时都需要设置约束?
我这样做对吗?我应该在自定义类中的哪里设置约束?
最佳答案
每次刷新时设置约束(例如在 LayoutSubviews 内)都会扰乱约束并导致大量不必要的工作。 WWDC 上有一场精彩的演讲:高性能自动布局。
https://developer.apple.com/videos/play/wwdc2018/220
但一般来说,使用 Interface Builder 会让你摆脱自己的束缚;也就是说,系统将在 View 生命周期的适当时间处理添加约束。
如果您必须以编程方式添加约束,那么将它们添加到初始值设定项中并调用layoutIfNeeded() 是一个很好的解决方案。
关于swift - 如何在初始化期间正确设置 subview 约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56223851/