【发布时间】:2016-11-20 21:32:58
【问题描述】:
View A 通过在 layoutSubviews 中计算和设置它们的框架来布局它的子视图。
视图 B 使用约束来布局它的子视图。
视图 A 包含许多视图 B 实例。
视图 A 在布局子视图时需要知道其子视图的大小,因此它会在它们上调用sizeThatFits:。
视图 B 的高度取决于它的宽度。在我的示例中,它内部有一个多行 UILabel。
B 应该如何实现它的sizeThatFits:,以便它返回正确的大小,同时考虑传递给sizeThatFits: 的size 参数和考虑到的约束?
到目前为止我尝试过/考虑过的事情:
systemLayoutSizeFittingSize: - 不起作用,因为它没有考虑传递给它的确切大小。它不能用于指定精确的宽度,例如水平收缩时垂直增长的视图。它只给出最压缩的大小或最扩展的大小。
intrinsicContentSize- 据我从文档中了解,这用于传递信息到自动布局。我们想要的是从自动布局获取信息。
到目前为止,这就是我的推理方式。如果我犯了错误,请纠正我。请帮助我,如果有人能指出我是如何做到的,我将不胜感激!
编辑:另外,也许有一些完全不同的方法可以做到这一点,甚至不使用sizeThatFits:?我唯一的要求是我可以继续在“外部”视图(视图 A)中使用框架布局和在“内部视图”(视图 B)中使用自动布局。
edit2:添加了一张图片来说明我必须解决的确切情况
edit3:忘了说,我需要支持iOS 7.0
【问题讨论】:
-
为什么不设置约束将视图 B 链接到视图 A,并将视图 A 的垂直内容拥抱优先级更改为低?
-
另外,如果您选择这种方式,请确保您的所有 B 视图都具有将所有视图链接在一起的顶部和底部约束,以便视图 A 知道如何调整大小;)
-
但这将在视图 A 中使用自动布局,我想知道如何在视图 A 中使用代码(框架布局)任意定位视图,同时在视图 B 中使用约束. 当然,图片中的布局用自动布局很容易实现,但是有时候布局不能用约束来表达,我想学习一下这种情况是怎么做的。
-
我在您所说明的布局中没有看到任何无法在约束中表达的内容。
-
是的,这是真的,但是,我想学习如何在布局无法仅用约束表达的情况下做到这一点
标签: ios autolayout uikit