所以我最近创建了Apple calls a leaf-level view(一个按钮),因此我按照Apple的文档来实现-intrinsicContentSize
并且一切正常(虽然代码感觉有点奇怪 - 我在我的设置中设置了约束-updateConstraints
方法定位子视图,以及-intrinsicContentSize
方法中的代码来计算总大小应该是什么;感觉就像我向自动布局系统提供重复信息一样。
但是,我还遇到了一个post on here声称,而不是使用-intrinsicContentSize
,使用严格约束,然后containerview将自动调整大小以适应它包含的视图。我也实现了这个,并取得了与上面相同的结果,但这次我并不觉得我是在复制发送的信息(我只是发送了直接约束)。请注意,我在上面提到的帖子中看到的视图是一个所谓的叶级视图,因为它听起来不会像添加任何其他视图一样。
根据内部内容调整容器视图大小的实现是正确的方法吗?
我目前倾向于第二种方法,因为我不认为我应该发送重复信息,但Apple的文档说不然(然后,Apple的文档有时会有点混乱/误导)。
关于我的具体情况的旁注,重要的是:我的按钮中有两个子视图,一个是图像,另一个是标签。图像从标签中获取尺寸,然后从图像中获取整个按钮(因此间接尺寸完全来自标签)。
答案 0 :(得分:1)
您的按钮视图应具有基于标签和图像的内部约束。这些应该足以使它具有正确的尺寸。您不需要为此实现intrinsicContentSize。
按钮的超级视图不会也不应该知道或关心按钮内的内容。您不直接引用内在内容大小,布局系统会这样做,如果您的按钮具有正确的内部约束,则没有必要。
内部内容大小允许视图根据其显示内容(例如标签中的文本)将其大小表示为视图层次结构的最底层。以上的一切都基于约束。
您还可以使用它来允许具有非自动布局子视图的视图参与自动布局,但这可能会导致大量重复的帧计算代码。