您可以使用自动布局添加派生约束吗?
Posted
技术标签:
【中文标题】您可以使用自动布局添加派生约束吗?【英文标题】:Can you add a derived constraint using auto layout? 【发布时间】:2013-12-09 01:10:54 【问题描述】:在使用类似于自动布局约束概念的机械 CAD 软件中,您通常可以添加“派生约束”。这对布局没有影响,但可以让您直接读取重要维度的值。
例如,考虑具有两个子视图的视图的以下布局:
32 64
|------| |------|
|-[imgOne]-[imgTwo]-|
|-------------------|
w
视图的宽度是左右默认边缘间距、图像视图之间的默认间距以及应用于图像视图的两个宽度约束(32 和 64)之和。
我想在运行时知道w
。
理论上,这应该是view.bounds
。但是,读取该属性并不总是安全的(因为视图可能尚未更新其布局约束)。
是否可以添加一个对视图大小没有影响但在布局完成后会更新其.constant
属性的约束?
(我尝试向视图添加宽度约束,优先级为1
,但.constant
始终读取标称值,而不是实际值。)
【问题讨论】:
【参考方案1】:添加“派生”约束将使您进入您开始时的同一个洞——等待自动布局完成您的视图布局。一切都与时机有关。使用自动布局时,读取视图最终几何图形的好地方是在视图控制器的 viewDidLayoutSubviews 方法中。换句话说,在 viewDidLayoutSubviews 中读取视图的边界。
【讨论】:
即使它确实让你陷入了同一个洞——而且它肯定可以,这取决于它是如何实现的——我仍然希望有一种方法可以避免直接访问边界,因为这似乎是倒退了一步当其他所有内容都受到约束时。以上是关于您可以使用自动布局添加派生约束吗?的主要内容,如果未能解决你的问题,请参考以下文章