【发布时间】:2023-03-19 19:19:01
【问题描述】:
我的问题是关于约束的创建:为什么使用activate 方法创建一组稍后激活的约束比使用.isActive = true 逐个激活更有效?
激活一个直接约束,我们基本上是在改变一个属性,一个已经在我们正在修改的UIView 中实例化的变量:
@available(iOS 9.0, *)
open var topAnchor: NSLayoutYAxisAnchor { get }
但定义表明使用Array更高效:
/* Convenience method that activates each constraint in the contained array, in the same manner as setting active=YES.
This is often more efficient than activating each constraint individually. */
@available(iOS 8.0, *)
open class func activate(_ constraints: [NSLayoutConstraint])
我看不到如何创建一个已经在范围内的变量数组,然后将其传递给循环以激活它。这比启用直接约束如何更有效?
【问题讨论】:
-
可能想看developer.apple.com/videos/play/wwdc2018/220 - 它有一些很棒的细节。
-
为什么您的代码针对 iOS 9? (为了记录,我仍然有针对此的应用程序涉及 CoreImage。)我努力提高效率。但就 iOS(甚至 iPadOS)而言,我没有看到实际问题。硬件比那些日子好多了……你能提供更多细节吗?
-
@dfd 这个代码是我直接从定义中得到的。
-
明白。 AutoLayout 是一种有趣的动物 - 并且文档很少。那时我会选择答案,稍后我会投票赞成。使用引擎...在可能的情况下设置
isActive = true并根据需要激活/停用其他引擎。查看任何警告,并在可能的情况下再次消除它们。最重要的是?如果它有效,它就有效。不要为小事出汗——我的意思是,与 AutoLayout 引擎打破布局中的错误约束相比,“高效”是很小的。
标签: ios swift constraints