iOS Autolayout intrinsicContentSize = -1

时间:2013-07-25 21:13:43

标签: ios height autolayout

使用autolayout时,调用intrinsicContentSize似乎是确定正确适合视图内容所需的CGSize的方法。

但是,此方法仅支持有限数量的现有UIView。 每当我创建自定义视图时,即使它像容器UIView中的UILabel一样简单,包含视图也无法确定其int​​rinsicContentSize(返回-1)。

我不明白为什么视图能够在屏幕上正确显示,但视图甚至不知道它自己的高度......

容器视图中的UILabel是一个简单的例子,但我正在处理稍微复杂的UIViews,其中可能有15个视图嵌套在彼此之中。为了确定包含其所有子视图的视图的大小,我必须手动创建我自己的intrinsicContentSize方法并且做非常耗时的工作,我必须总结子视图的所有高度加上所有的限制。 这个过程很糟糕。忘记添加其中一个子视图或约束的高度,很容易错过某个高度。此外,通过动态子视图,事情变得更加复杂。例如,如果视图有2列动态子视图,则需要手动查找每个列的子视图+约束的高度,比较这些高度并返回两者中的较大者。同样,这是一个简单的例子,但通常情况并非如此简单,导致许多偏头痛。

回到我之前的问题。 iOS如何显示视图,甚至不知道视图有多高?必须有一些方法来找出那个高度是什么。谢谢你的阅读。

这是一张图片,可以帮助想象我想要的东西。 image

1 个答案:

答案 0 :(得分:0)

您的所有子视图都使用自动布局吗?我的意思是,如果你使用自动布局放置MyCompositeObject,那个复合对象是否在内部使用约束来放置它的许多对象?我发现如果是这样,那么intrinsicContentSize将考虑所有子视图,但如果没有,你的UIView的内在内容大小将最终返回一些不准确和小的东西。