swift - 如何在初始化期间正确设置 subview 约束?

标签 swift layout uiview constraints

我知道如何设置约束,但我确实需要知道如何正确设置它。

基本上,我有一个 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/

相关文章:

ios - SpriteKit 简单形状不绘制

ios - ParseClientConfiguration - 未解析的 ios sdk v1.12.0

swift - Xcode 8 Storyboard 项目不可选择

c++ - 继承类的内存布局

ruby-on-rails-3 - 在液体布局中渲染部分 (Rails3)

winforms - FlowLayoutPanel AutoSize 高度不起作用

ios - 来自 iOS "Do not add subviews directly to the visual effect view itself"的警告

ios - 对 UIView 的起源感到困惑

ios - 快速删除动画

ios - 检测 UIPanGestureRecognizer 开始和结束的 UIView 网格方 block